Hallo zusammen,
ich arbeite derzeit an einer JavaFX Application und habe ein kleines Problem. Ich möchte einen Prozess starten und zuvor eine TextArea updaten, wenn ich das nun so mache startet er mir aber erst den Prozess und updatet dann, wenn er fertig ist die TextArea.
Also z.B. ich öffne einen FileChooser, dann wenn ich damit eine Datei wähle mache ich:
textArea.setText("Starte Prozess");
object.startRandomMethod;
textArea.appendText("Prozess beendet")
Wenn ich das so mache dann wird erst die Methode aufgerufen und danach die Texte gesetzt.
Wenn ich das ganze in einem neuen Thread ausführe funktioniert es wie gewollt, das einzige Problem ist nur, dann ist das Fenster nicht blockiert (also der main Thread von Java) und man könnte theoretisch immer wieder einen neuen Thread erstellen, was nicht sein soll.
Hier mal ohne Thread:
Hier mal wie ich es mit dem Thread gemacht habe:
Hat jemand eine Idee wie ich das lösen kann?
ich arbeite derzeit an einer JavaFX Application und habe ein kleines Problem. Ich möchte einen Prozess starten und zuvor eine TextArea updaten, wenn ich das nun so mache startet er mir aber erst den Prozess und updatet dann, wenn er fertig ist die TextArea.
Also z.B. ich öffne einen FileChooser, dann wenn ich damit eine Datei wähle mache ich:
textArea.setText("Starte Prozess");
object.startRandomMethod;
textArea.appendText("Prozess beendet")
Wenn ich das so mache dann wird erst die Methode aufgerufen und danach die Texte gesetzt.
Wenn ich das ganze in einem neuen Thread ausführe funktioniert es wie gewollt, das einzige Problem ist nur, dann ist das Fenster nicht blockiert (also der main Thread von Java) und man könnte theoretisch immer wieder einen neuen Thread erstellen, was nicht sein soll.
Hier mal ohne Thread:
Java:
@FXML
public void updateData() {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open Resource File");
File selectedFile = fileChooser.showOpenDialog(stage);
if (selectedFile != null) {
DataLoader loader = new DataLoader();
infoTextfield.appendText("Start updating... " + "\n" + "this might take a few minutes");
loader.loadData(selectedFile.toString());
infoTextfield.appendText("finished updating");
}
}
Hier mal wie ich es mit dem Thread gemacht habe:
Java:
@FXML
public void updateData() {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Open Resource File");
File selectedFile = fileChooser.showOpenDialog(stage);
if (selectedFile != null) {
new Thread(new Runnable() {
@Override
public void run() {
DataLoader loader = new DataLoader();
infoTextfield.appendText("Start updating... " + "\n" + "this might take a few minutes");
loader.loadData(selectedFile.toString());
infoTextfield.appendText("finished updating");
}
}).start();
}
}
Hat jemand eine Idee wie ich das lösen kann?
Zuletzt bearbeitet von einem Moderator: