ich habe hier eine Startklasse Main.java, die nach dem SplashScreen die eigentliche Klasse SecondRunFrame aufrufen soll. Die Klasse SecondRunFrame braucht aber Daten aus einer Settings-Datei. Wenn Main.java also das erste Mal ausgeführt wird, existiert die Settings-Datei noch nicht und SecondRunFrame würde sich aufhängen.
Deshalb rufe ich zuerst FirstRun innerhalb von Main auf, um diese Settings-Datei anzulegen.
Java:
publicclassMain{publicstaticvoidmain(String[] args)throwsFileNotFoundException{Thread splashThread =newThread(newSplashScreen());
splashThread.start();FirstRun first =newFirstRun();
first.main(null);SecondRunFrame second =newSecondRunFrame();
second.main(null);}}
Ich suche nach einer Möglichkeit, dass zwischen first.main(null) und second.main(null) eine Zeitverzögerung enthalten ist, weil mit der dargestellten Methode nach wie vor SecondRunFrame abbricht, weil die Datei noch nicht geschrieben wurde während sie gelesen werden soll.
Wie baue ich hier ein, dass SecondRunFrame wartet, bis FirstRun fertig ist?
Du kannst (und solltest) Threads geeignet synchronisieren, sofern dies erforderlich ist.
Eine vorgeschriebene Zeitspanne zu warten, und dann den zweiten Thread starten, ist quatsch. Arbeite besser mit einfachen .wait() und .notify()
Der zweite Thread soll einfach so lange "warten" (Aufruf von .wait()), bis der erste ihm Bescheid sagt, dass eine bestimmte Aufgabe ereldigt ist (Aufruf von .notify() )
Threads hatte ich bereits im Hinterkopf, aber wieder verworfen. Denn die sollten doch der Nebenläufigkeit dienen und nicht dem Nacheinander. Aber wenn man Threads auch dafür nutzen kann, dann probiere ich es mal aus.
So, wie ich deinen Code gelesen und interpretiert habe, laufen FirstRun und SecondRun doch nebeneinander?
Andernfalls ergibt die Frage für mich keinen wirklichen Sinn. Du kannst auf die Datei natürlich erst zugreifen, sobald sie auch existiert. In deinem Fall also, sobald sie geschrieben wurde.
Möglicherweise liegt dein Problem ja ganz woanders (etwa das Speichern der Datei selbst läuft schon schief), aber das ist hier nicht ersichtlich..
Das Abspeichern funktioniert, das habe ich getestet.
Und so wie ich die Reihenfolge hingeschrieben habe, verstehe ich es, dass die FIrstRun vor SecondRunFrame abgearbeitet wird. Das wäre für nicht nebeneinander.
SecondRunFrame braucht aber Werte, die erst manuel über einen Dialog eingegeben werden. Dieser Dialog wird in FIrstRun aufgerufen. Während also der Eingabedialog offen ist, startet auch bereits SecondRunFrame. Deswegen hatte ich gefragt, ob man nicht SecondRunFrame warten lassen könnte.
Ich werde Deinen Vorschlag einmal versuchen umzusetzen.