Start des zweiten Threads erst nach Beenden des ersten Threads

Sherry

Aktives Mitglied
Hallo,

ich möchte mit dieser Klasse eine GUI starten. Ihr seht, dass zuerst nach einer Datei .settings.cfg gesucht wird

Java:
package com.sherry.calculator;

import java.io.File;

import com.sherry.calculator.gui.views.AllinFeeFrame;
import com.sherry.calculator.gui.views.SettingsFrame;


public class Main {

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		Thread splashThread = new Thread(new SplashScreen());
		Thread settingsMain = new Thread(new SettingsFrame());
		splashThread.start();
		if (new File(System.getProperties().getProperty("user.home")+File.separator+".settings.cfg").exists()) {
			Thread allinFeeMain = new Thread(new AllinFeeFrame());
			allinFeeMain.start();
		} else {
			settingsMain.start();
			try {
				Thread allinFeeMain = new Thread(new AllinFeeFrame());
				allinFeeMain.join();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		

	}

}
Existiert diese Datei noch nicht, soll zuerst über SettingsFrame().java die Datei angelegt werden. Und wenn dieser Thread beendet ist, soll AllinFeeFrame().java über den zweiten Thread allinFeeMain gestartet werden. Das klappt nicht so richtig. Ich hatte gelesen, dass join() gerade wartet, bis der erste Thread beendet ist.
So hat das zur Folge, dass die Datei .settings.cfg noch nicht angelegt wurde, die aber von AllinFeeFrame().java benötigt wird.
Dr StackTrace zeigt folgende Meldungen:
Code:
java.io.FileNotFoundException: /home/sherry/.settings.cfg (Datei oder Verzeichnis nicht gefunden)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:146)
	at java.io.FileInputStream.<init>(FileInputStream.java:101)
	at com.sherry.calculator.Settings.readSettings(Settings.java:41)
	at com.sherry.calculator.gui.views.AllinFeeFrame.<init>(AllinFeeFrame.java:73)
	at com.sherry.calculator.Main.main(Main.java:31)
java.io.FileNotFoundException: /home/sherry/.settings.cfg (Datei oder Verzeichnis nicht gefunden)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:146)
	at java.io.FileInputStream.<init>(FileInputStream.java:101)
	at com.sherry.calculator.Settings.readSettings(Settings.java:41)
	at com.sherry.calculator.gui.views.AllinFeeFrame.<init>(AllinFeeFrame.java:74)
	at com.sherry.calculator.Main.main(Main.java:31)
java.io.FileNotFoundException: /home/sherry/.settings.cfg (Datei oder Verzeichnis nicht gefunden)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:146)
	at java.io.FileInputStream.<init>(FileInputStream.java:101)
	at com.sherry.calculator.Settings.readSettings(Settings.java:41)
	at com.sherry.calculator.gui.views.AllinFeeFrame.<init>(AllinFeeFrame.java:75)
	at com.sherry.calculator.Main.main(Main.java:31)
Exception in thread "main" java.lang.NullPointerException
	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1008)
	at java.lang.Double.parseDouble(Double.java:540)
	at com.sherry.calculator.gui.views.AllinFeeFrame.<init>(AllinFeeFrame.java:75)
	at com.sherry.calculator.Main.main(Main.java:31)

Wie kann ich das lösen, so dass AllinFeeFrame erst startet, wenn die Daeti angelegt wurde?

Grüße

Sherry
 

Phash

Top Contributor
Offensichtlich willst du das ja nicht gleichzeitig machen, du kannst also auf den Thread einfach verzichten, und hat dann das Reihenfolge Problem nicht.

Oder du startest den 2. Thread einfach am ende des ersten.

Gala du es unbedingt so lösen magst, schau dir mal observer oder visitor pattern an.
 

DrZoidberg

Top Contributor
Versuch mal das hier
Java:
public static void main(String[] args) {
    Thread splashThread = new Thread(new SplashScreen());
    Thread settingsMain = new Thread(new SettingsFrame());
    splashThread.start();
    if(!new File(System.getProperties().getProperty("user.home")+File.separator+".settings.cfg").exists()) {
        settingsMain.start();
        try {
            settingsMain.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    Thread allinFeeMain = new Thread(new AllinFeeFrame());
    allinFeeMain.start();
}
 

Sherry

Aktives Mitglied
Erstmal besten Dank für die beiden Antworten.
Allerdings @Phash verstehe ich den Zusammenhang zu dem Observer noch nicht. Wenn ich das richtig interpretiere liefe das auf einen Listener hinaus.

@DrZoidberg:
Dein Vorschlag bringt leider wieder nur dieselben StackTraces, die Datei wurde nicht gefunden.

Mein Vorhaben ist ja, dem Anwender bei einem Erststart zur Eingabe seiner Benutzereinstellungen in die besagte Datei aufzufordern. Die Datei kann ja auch erst geben, das Programm mindestens einmal gelaufen ist.
Mein erster Ansatz war, in der if-else-Anweisung bei Nichtvorhandensein
Java:
SettingsFrame settings = new SettingsFrame();
AllinFeeFrame main = new AllinFeeFrame();
if (!new File(System.getProperties().getProperty("user.home")+File.separator+".settings.cfg").exists()) {
   settings.main(null);
   main.main(null);
} else {
   main.main(null)
}
ablaufen zu lassen. Aber sobald die Gui settings mit OK wieder geschlossen war, gab es zwar die Datei aber main.main(null) machte nichts.
Das AllinFeeFrame mit OK aus der Settings-Gui wollte ich auch nicht starten lassen, weil wenn dieses während des Laufens aus AllinFeeFrame heraus gestartet und beendet wird, würde dann auch wieder AllinFeeFrame gestartet werden.

Also irgendwie müsste es doch eine Lösung geben, da soviele Programme beim Erststart die Einstellungen wünschen und dann nie wieder.
 

Thallius

Top Contributor
Verstehe Dein Problem nicht wirklich Du must doch nur testen ob es die Datei nicht gibt und wenn dann must du vor dem main() diese Datei erst erstellen. Also schmeantisch:

Java:
if(!exists(datei))
{
     erstelleSettingsUI()
     erstelleDatei()
}
erstelleMainUI()

Gruß

Claus
 
Zuletzt bearbeitet:

Sherry

Aktives Mitglied
Na ja, Deine Lösung hatte ich schon ausprobiert. Das ist ja auch logisch. Aber irgendwo muss ich ja das Objekt für das Hauptprogramm anlegen. Momentan habe ich folgendes Konstrukt:

Java:
public class Main {
	
	public static void main(String[] args) {
		Thread splashThread = new Thread(new SplashScreen());
		splashThread.start();
		SettingsFrame settings = new SettingsFrame();
		
		if (!new File(System.getProperties().getProperty("user.home")+File.separator+".settings.cfg").exists()) {
			settings.main(null);
			
		} else {
			AllinFeeFrame allinFee = new AllinFeeFrame();
			allinFee.main(null);
		}
		AllinFeeFrame allinFee = new AllinFeeFrame();
		allinFee.main(null);
	}

}
Was auch nicht klappt. Ich sehe einen Zusammenhang darin, dass AllinFeeFrame.java auf die .settings.cfg zugreift und bei der Initialisierung des Objektes aber die Datei noch nicht existiert.
Hier stehen Parameter drin, ohne die AllinFeeFrame.java nicht läuft. die aber so inividuell sind, dass ich sie nicht vorgeben kann.
 

Sherry

Aktives Mitglied
Okay, sag's mir. Ich denke, ich habe klar und deutlich ausgedrückt, was ich möchte. Deine Bemerkung greift mich jetzt wirklich an:mad:
Denn damit unterstellst deinem Gegenüber irgendwo Dummheit. Les doch einfach, was ich geschrieben habe. Mit ein wenig Nachdenken, wirst Du schon verstehen, was ich meine.
Ich glaube Du hast eher ein grundlagen Problem. Was ist denn bitteschön ein "Hauptprogramm"?

Gruß

Claus
 

Thallius

Top Contributor
Und ich habe klar und deutlich gesagt wie es geht. Wenn Du das so nicht hinbekommst besteht kein Grund irgendwelche total abstrussen und sinnlosen Thread Wurschteleien zu basteln. Das habe ja bereits auch andere schon gesagt.

Also auch wenn es Dich angreift. Lerne programmieren.

Ich bin hier raus. Viel Glück noch beim rumprobieren...

Claus
 

Sherry

Aktives Mitglied
Mit anderen Worten, Du bist wieder so ein abgehobener neunmalkluger Oberguru, der alles von Anfang an gekonnt hat.

Und ich habe klar und deutlich gesagt wie es geht. Wenn Du das so nicht hinbekommst besteht kein Grund irgendwelche total abstrussen und sinnlosen Thread Wurschteleien zu basteln. Das habe ja bereits auch andere schon gesagt.

Also auch wenn es Dich angreift. Lerne programmieren.

Ich bin hier raus. Viel Glück noch beim rumprobieren...

Claus
 

Natac

Bekanntes Mitglied
Die Frage die sich stellt ist doch: Brauchst du die Threads umbedingt?

Weil wenn man etwas nicht benötigt und es trotzdem einbauen möchte, macht man Dinge unnötig kompliziert. Gerade in er Programmierung passiert das eh oft genug von alleine, weswegen man bestrebt ist, die Dinge möglichst einfach zu halten.

Daher: Wenn du die Threads nicht benötigst, dann lass sie weg und dein Problem hat sich von selbst erledigt. ;)
 

Sherry

Aktives Mitglied
Das habe ich ja bereits selber erkannt:
Die Frage die sich stellt ist doch: Brauchst du die Threads umbedingt?

Weil wenn man etwas nicht benötigt und es trotzdem einbauen möchte, macht man Dinge unnötig kompliziert. Gerade in er Programmierung passiert das eh oft genug von alleine, weswegen man bestrebt ist, die Dinge möglichst einfach zu halten.

Daher: Wenn du die Threads nicht benötigst, dann lass sie weg und dein Problem hat sich von selbst erledigt.
Ich habe es ja auch insoweit kommuniziert, dass der Compiler Fehler auswirft, wenn main.java als Erstes gestartet wird. Hier habe ich nach dem Splashscreen und dem Aufruf der SettingsFrame.java - mit der ja die Konfigurationsdatei aufgerufen wird - noch den Start des eigentlichen Programms AllInFeeFrame.java enthalten. Letzteres greift selbstverständlich auf die Konfigurationsdatei zu.
Wenn jetzt das Ganze bei Aufruf compiliert wird, merkt der Compiler, dass etwas noch nicht existiert und bringt die Fehlermeldungen. Ergo werde ich die Konfigurationsdatei mit dem Wissen nicht zu Beginn anlegen lassen können, ohne sie festeinzuprogrammieren. Selbst das klappt nicht, weil sie auch erst nach dem Compile-Vorgang existieren würde.

Und der andere Punkt hier
Java:
    if(!exists(datei))
    {
         erstelleSettingsUI()
         erstelleDatei()
    }
    erstelleMainUI()
klappt so auch nicht. Einmal aus den eben genannten Gründen. Und dann startet auch "erstelleMainUI()" nicht.
Also von den Threads bin ich schon lange abgekommen.
 

Lonsdaleit

Aktives Mitglied
Hi,

wie wäre es, wenn du uns kurz erklärst, was genau du vorhast.
Bei dem, was du gezeigt hast, kann ich nicht die Notwendigkeit von Threads erkennen.

Wenn du das Einlesen und Schreiben der Konfig jeweils in eine Methode packst und das erstellen der GUI ist es nur eine Frage der Reihenfolge, in der du die jeweiligen Methoden aufrufst.

Ist die Reihenfolge korrekt, so sollte die Konfig erstellt und eingelesen werden und erst dann die GUI gebastelt werden.

Wenn du die Threads benötigst, kannst du einen Thread schreiben der in einer Schleife mit x Sekunden Wartezeit dazwischen überprüft ob die Datei mittlerweile existiert und wenn ja, dann den Thread zum erstellen der GUI aufruft.

Aber wie gesagt - ich sehe bisher keinen Grund für Threads.

Wie erstellst du deine Konfigdatei?

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
J Junit start surefire for manual testing Allgemeine Java-Themen 1
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
J Linux .jar beim Start automatisch ausführen Allgemeine Java-Themen 6
O Start externer Programme Allgemeine Java-Themen 1
Meeresgott Best Practice Java to exe oder exe to start java ? Allgemeine Java-Themen 5
J Probleme exe-Start mit Task Scheduler Allgemeine Java-Themen 1
T Erste Schritte FAIL - Deployed application at context path / but context failed to start Allgemeine Java-Themen 1
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
K Erste Schritte Start einer JAR Datei 2 Wege aber einmal nicht die volle Funktionlität Allgemeine Java-Themen 20
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
C Can't start application since jvm.dll is not installed Allgemeine Java-Themen 1
L Java Web Start - generierter Prozess Allgemeine Java-Themen 4
M Swing JFreechart x-Achse DateAxis, start im Ursprung Allgemeine Java-Themen 3
F Java Error, bei Installation, Start und dem Control Panal Allgemeine Java-Themen 8
X Skalierung von Bildern zum Start des Programms Allgemeine Java-Themen 3
X Problem bei process.start() ExitValue Allgemeine Java-Themen 5
B Best Practice Start-Applikation mit Logger? Allgemeine Java-Themen 3
A Start Ladescreen Allgemeine Java-Themen 2
A Could not find main class: start Allgemeine Java-Themen 5
S Probleme beim Start von jar Datein Allgemeine Java-Themen 15
G Webstart Java Web Start und native Bibliotheken Allgemeine Java-Themen 3
P Problem mit Java Web Start Allgemeine Java-Themen 1
L Java Web Start: IE Konfiguration? Allgemeine Java-Themen 5
H Unterschied EventQueue.invoke... und thread.start() Allgemeine Java-Themen 4
J Dateinamen beim Start auslesen Allgemeine Java-Themen 10
H Mehrfachen Start des Programms verhindern Allgemeine Java-Themen 6
F Java Web Start Parameterübergabe an Applikationsumgebung Allgemeine Java-Themen 2
A Start von Java Plugin Allgemeine Java-Themen 2
M Java Web Start - Native DLL einbinden Allgemeine Java-Themen 2
D Speicher beim Start zuweisen Allgemeine Java-Themen 10
Q 32 bit 64 bit start up problem Allgemeine Java-Themen 6
T JDialog vor Hauptfenster beim Start Allgemeine Java-Themen 5
E Focus nach Start eines externen Programmes Allgemeine Java-Themen 6
H Webstart...Start dauert ewig... Allgemeine Java-Themen 5
G Auf den Start eines Threads warten? Allgemeine Java-Themen 4
T Mehrmaligen Start verhindern Allgemeine Java-Themen 19
W Windows XP: ProcessBuilder.start: Kommandoshell anzeigen Allgemeine Java-Themen 3
G Prozess direkt starten beim Start des Appservers Allgemeine Java-Themen 3
M Probleme Runtime.getRuntime().exec(Start.cmd); Allgemeine Java-Themen 10
M Windows: Start --> Ausführen --> [url]http://meine.url.com[/url] Allgemeine Java-Themen 3
P Start eines Programms scheitert an Java Allgemeine Java-Themen 9
B Start - Schwierigkeiten Allgemeine Java-Themen 10
zilti Eclipse meldet Fehler beim Start Allgemeine Java-Themen 8
L Nutzt Java bei Start der VM übermäßig viel Speicher? Allgemeine Java-Themen 3
G In Eclipse läufts, aber bei java Start.class gehts nicht Allgemeine Java-Themen 8
M Fehler beim Start des Chat-Applets von java-forum.org Allgemeine Java-Themen 10
C Java Web Start Allgemeine Java-Themen 3
M Access lässt sich nicht über "exec(command)" start Allgemeine Java-Themen 3
S eclipse start bringt fehler Allgemeine Java-Themen 2
S API für Start-menu und Links Allgemeine Java-Themen 2
T doppelgeklickte Datei automatisch nach Start des Prog öffnen Allgemeine Java-Themen 2
G Runtime.getRuntime().exec("cmd /c START") Allgemeine Java-Themen 3
F IE-Applet vs. Java Web Start Allgemeine Java-Themen 5
X Applikation Java Web Start fähig machen Allgemeine Java-Themen 4
X Parameter bei Start über Batch-Datei übergeben(Tag und Zeit) Allgemeine Java-Themen 3
S Java Web Start Anwendungen laden nicht vernünftig Allgemeine Java-Themen 6
kodela Drücken der ALT-Taste wird nur bei jedem zweiten Mal erkannt Allgemeine Java-Themen 5
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
Fab1 Komponenten eines zweiten Java Programms auslesen Allgemeine Java-Themen 8
S Zweiten Thread erst starten wenn erster Thread beendet ist ? Allgemeine Java-Themen 6
M Zweiten Prozess in Java starten! Allgemeine Java-Themen 5
rode45e Java Threads Allgemeine Java-Themen 4
M Threads Allgemeine Java-Themen 1
L Threads Threads in Chatroom Allgemeine Java-Themen 30
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
CptK Backpropagation parallelisieren: Kommunikation zwischen den Threads Allgemeine Java-Themen 7
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
W Wieviele Threads sind sinnvoll? Allgemeine Java-Themen 8
W Alternative für Threads Allgemeine Java-Themen 6
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
T Multithreading: Wie viele Threads sollte ich erstellen? Allgemeine Java-Themen 12
G Threads vom Mainprogramm steuern Allgemeine Java-Themen 8
S BlockingQueue mit dynamischer Anpassung der Anzahl von Producer und Consumer Threads Allgemeine Java-Themen 1
x46 Threads Threads anhalten Allgemeine Java-Themen 1
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
W Threads Problem Allgemeine Java-Themen 15
T Threads Tic Tac Toe mit Threads Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
J Threads - java.lang.IllegalThreadStateException Allgemeine Java-Themen 6
J Internet Broswer in Threads öffnen Allgemeine Java-Themen 1
B Threads Multithreading Threads sollen warten Allgemeine Java-Themen 12
N 1000 MQTT Messages die Sekunde - 1000 Threads erstellen ? Allgemeine Java-Themen 10
D Threads Parallel laufende Threads Allgemeine Java-Themen 4
J Unvorhersehbares Verhalten - benutze ich die falsche Bedingungsprüfung oder brauche ich Threads? Allgemeine Java-Themen 12
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
P Threads Parallelisierte DB-Abfragen mit variabler Anzahl an Threads Allgemeine Java-Themen 4
J Threads Threads Allgemeine Java-Themen 9
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
E Threads Ausführung in Threads ist langsamer als ohne Threads Allgemeine Java-Themen 13
A Anzahl an Threads Systemweit Allgemeine Java-Themen 2
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
M Threads JPanel eingeforen mit Threads Allgemeine Java-Themen 2
F Threads Allgemeine Java-Themen 6
F Threads Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben