Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Einen Path von einer Main zu einer anderen Main übergeben
1. Paket: Ich führe ein Main Programm aus und speichere eine Datei.
2. Paket: Ich führe ein Main Programm aus und würde gerne den Pfad
der Datei wissen. Ich weiß schon, dass das erste Programm erst ausgeführt
werden muss, um den Pfad zu kennen.
Das Problem: Im 2. Paket befindet sich eine Klassenvariable, der ich den
Pfad übergebe und wenn ich das 2. Programm ausführen will, dann zeigt er mir
eine FileNotFoundException an.
Ich übergebe den Pfad über Klassenvariable von dem 1. Paket auf
das 2. Paket.
Vorgehensweise: 1. Main (1. Paket) wird ausgeführt und der String Pfad wird einem static String Pfad (vom 2. Paket) übergeben, sodasss die 2. Main (2. Paket) mit dem String (=Pfad) weiterarbeiten kann.
Hat einer das System verstanden? Ich kann es nochmal erklären, wenn es zu undurchsichtig ist.
Kann es sein, das es Probleme gibt, wenn ich dem FileReader den Path , den er in der Klassenvariable (Format: (D:\Documents and Settings\DLBWMRC\Projekt SAP\lagertest.txt) gespeichert haben sollte, so mitgebe??
Er bringt dann nämlich eine FileNotFoundException als Fehler. Danke für die Informationen.
//Exportieren der IZBDaten für das Lager in einer Datei
ExportDialog dia2 = new ExportDialog();
String lagerpath = dia2.opendialog();
Exportdata testex = new Exportdata();
testex.setExportinfo(lagerpath, ";");
try {
testex.export(allData);
System.out.println("Daten sind Exportiert worden!");
Reader.lagerpath=lagerpath;
} catch (IOException e) {
e.printStackTrace();
}
Code:
public class Reader
{
//Deklaration
static int izbzaehler;
String izblinie;
String izblager;
ArrayList al_linie=new ArrayList();
ArrayList al_lager=new ArrayList();
public static String lagerpath=new String();
public static String liniepath=new String();
public ArrayList completereadlager()
{
try
{
/*Bitte die richtige Datei einlesen, die bei der
* Speicherung angegeben wurde. Statt D:\\ usw. sollte lagerpath stehen
*/
System.out.print(lagerpath);
FileReader fr=new FileReader("D:\\Documents and Settings\\DLBWMRC\\Projekt SAP Richter\\FS_IZB_test.txt");
BufferedReader br=new BufferedReader(fr);
String line=new String();
while ((line = br.readLine()) != null)
{
//Deklarationen
StringTokenizer token=new StringTokenizer(line, ";");
izbzaehler++;
/* Es wird aus der Datei gelesen und die
* Werte werden in eine ArrayList geschrieben.
*/
for (int i=0;token.hasMoreTokens()==true;i++)
{
izblager=token.nextToken();
al_lager.add(i, izblager);
}//endfor
}//endwhile
br.close();
System.out.print("Er hat es gelesen!");
return al_lager;
}//endtry
catch (FileNotFoundException f)
{
System.out.print("Datei wurde nicht gefunden");
return null;
}//endcatch
catch (IOException io)
{
System.out.print("IO Fehler");
return null;
}//endcatch
catch (Exception e)
{
System.out.print("Fehler");
return null;
}
}//end Method readlager;
Wozu sollen in einer Applikation eigentlich 2 main-methoden gut sein??? Willst Du das Programm auf verschiedenen Wegen starten? Und wenn ja, warum regelst Du den Unterschied nicht über die Parameterliste??
Was ich meine ist folgendes:
Die Main-Methode ist im Normalfall die Methode, die als Einsprungpunkt in eine Applikation für die JVM festgelegt wird, damit diese weiß, wo Sie denn anfangen soll.
Wenn Du 2 Main-Methoden definierst, und die eine von der anderen aufgerufen wird, dann muss eben diese aufgerufene Methode keine Main-Methode sein, sondern meinetwegen eine Klassen-oder Instanzmethode.
wenn du unbedingt eine 2. main methode aufrufen willst:
Code:
public class MainTest {
public static void main(String args[]) {
System.out.println("Ich bin die 1. main");
String[] m = new String[1];
m[0] = "main1";
MainTest2.main(m);
}
}
Code:
public class MainTest2 {
public static void main(String[] args) {
System.out.println("Ich bin die 2. main");
System.out.println(" und komme von "+args[0]);
}
}
würd ich das so machen
aber ich seh darin nicht viel sinn...
Ich denke, das ist ein grundsätzliches Verständnisproblem. Die Methode
Code:
public static void main(String[] args0){
}
ist keine Methode, die zu irgendeinem Objekt gehört. Das ist einfach nur DER Einsprungpunkt für die JVM in die Anwendung, nicht die 'Haupt-Methode' von irgendeiner Klasse.
class Statisch {
public static String statisch;
}
public class Main1 {
public static void main(String[] args) {
Statisch.statisch = "Ich konmme von Main1";
Main2.main(null);
}
}
class Main2 {
public static void main(String[] args) {
System.out.println(Statisch.statisch);
}
}
Jetzt erklär mal was in deinem Programm anders sein soll. ???:L
Ich glaube, wir verstehen uns falsch. Das mit den Mains hast du
verstanden.
Das Problem liegt darin, das ich die 2. Main nicht unbedingt aufrufen
muss (das entscheidet der Endbenutzer. Die 2. Main ist für das
Drucken gedacht). Das kann er über Schaltflächen im Browser machen.
Wie ist denn das möglich, das er in der 2. Main trotzdem den Pfad übernimmt?
Wenn ich so nach deinem Code vorgehe, bringt er mir als Ergebnis null heraus
(Main2.main(null) wurde weggelassen).
Wer kann das über welche Schaltflächen in welchem Browser machen? ???:L
Nach allem was du bis jetzt geschrieben hast verfestigt sich meine Meinung,
daß deine 2. Main in einer separaten JVM läuft und somit natürlich nichts von
Änderungen an statischen Variablen durch die 1. Main mitbekommen kannn.
die 1. Main soll nicht die 2. Main aufrufen - ich glaube, das ich ne separate JVM. Ich führe erst die
erste Main aus + Ergebnis (drücken auf Run in Eclipse) und dann führe ich die zweite Main aus + Ergebnis
(drücken auf Run in Eclipse).
Denn es sind nunmal 2 verschiedene Programme die
du ablaufen läßt. Und da das erste Programm ja beendet
wird, bevor das zweite startet, können sich die beiden
auch nicht anders (z.B. über Sockets) austauschen.
Es bleibt also nur die Möglichkeit, das das erste Programm
den Pfad irgendwo zwischenspeichert (Datei, Server,
Windows-Registry, ...) damit das 2. Programm ihn auslesen kann.