Ich fand heraus, dass meine GUI nach 3-4 Sekunden einfriert, wenn ich auf die Schaltfläche "Start" wie "keine Antwort" klicken. Wenn ich weiter auf die App klicke, muss sie herunterfahren.
Jetzt möchte ich das verhindern, aber ich habe keine Ahnung wie. So weit ich weiß, dass JavaFX in einem einzelnen Thread läuft, muss ich daher, um meine TextArea zu aktualisieren, während die Methoden ausgeführt werden, diese Methoden in einem anderen Thread ausführen.
Ich hoffe, dass mir jemand helfen kann.Update TextArea während der Ausführung von Prozessen
Wie sieht mein Projekt aus?
Ich habe einen FXML, einen Controller, einen Handler, einen Transformer, auch einen Writer und eine Reader-Klasse (die in der Handler-Klasse verwendet werden).
Wenn ich auf die Schaltfläche klicke, die an eine Methode im Controller gebunden ist, wird eine Instanz von Handler erstellt und diese ruft den Reader auf, um eine Textdatei einzulesen, die in eine Liste von Strings umgewandelt wird (zeilenweise).
Zusätzlich werden die Zeilen manipuliert. Danach wird der Writer verwendet, um eine neue Datei zu erstellen und die neuen manipulierten Zeilen in diese Datei zu schreiben.
Es ist dem Benutzer auch erlaubt, auf mehr als nur eine Datei zu verweisen.
Was ich will ist, dass der Textbereich immer dann angezeigt wird, wenn der Leser beginnt, eine Datei wie "Die Datei ... wird gelesen" zu lesen.
Dann anhängen "Die Datei ... wird manipuliert", wenn Transformer zum Handeln kommt und dann
"Die Datei ... wird geschrieben", wenn die neuen Zeilen in die neue Datei geschrieben werden. Hier
ist ein Code ..
Controller:
public class FXMLDocumentController implements Initializable {
@FXML
private TextArea console;
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
Handler hand = new Handler();
hand.handle(files);
}
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
Handler:
public class Handler {
public void handle(List<String> files) {
for (String s : files) {
List<String> ls = Reader.readFile(s);
Writer.writeFile(Transformer.transform(ls));
}
}
Wie sollte ich meinen Code ändern, um die TextArea- zu aktualisieren, wenn eine Datei gelesen, manipuliert oder geschrieben?
Info: Ich weiß, dass die Klasse Handler wird nicht kompiliert, wie ich die Initialisierung der Liste „Dateien“ gelöscht, die Strings von Dateipfaden enthält.
Wenn ich relevante Informationen weggelassen habe, zögern Sie nicht zu fragen.
Ich danke Ihnen im Voraus!
Sie sollten sich Aufgaben und Dienste im Parallelitätspaket ansehen: http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm. Und [Platform.runLater()] (https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#runLater-java.lang.Runnable-). – ManoDestra