Hallo Ich habe eine Anwendung, die sowohl auf GUI (Java FX) als auch Befehlszeile ausgeführt wird. Wenn als GUI ausgeführt, zeige ich den Status im Textbereich. Das funktioniert gut.Java FX: Öffnen Popup von verschiedenen FX-Thread
Aber das Problem ist, wenn ich versuche, einen Fehler (über Popup) aus verschiedenen (nicht javafx) Klasse anzuzeigen, zeigt es mir Java Fx - Thread Ausnahme nicht auf FX-Thread.
Unten ist mein Code
Dies ist meine Java FX-Klasse, wo ich Popup zeigen wollen.
public class DeploymentProcesController implements Initializable {
@FXML
private TextArea statusTextArea;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
public void updateGUIMessage(String message) {
if (Platform.isFxApplicationThread()) {
statusTextArea.appendText(message);
} else {
Platform.runLater(new Runnable() {
@Override
public void run() {
statusTextArea.appendText(message);
}
});
}
}
public void displayAlertMessages(final String message) {
Platform.setImplicitExit(false);
Task<Void> task = new Task<Void>() {
@Override public Void call() {
Platform.runLater(new Runnable() {
public void run() {
Alert alert = new Alert(AlertType.INFORMATION, message, ButtonType.OK);
alert.showAndWait();
}
});
return null;
}
};
new Thread(task).start();
}
}
Ich habe eine nicht FX-Klasse, die der Eintrittspunkt ist. Basierend auf dem Lauftyp (Kommandozeile/GUI) aktualisiere ich den Status.
Hier ist, wie ich rufe, um den Status zu aktualisieren.
Ich habe keine Probleme, wenn ich die updateGUIMessage-Methode aus non-fx-Klasse aufrufen. Dies liegt daran, dass sich das statusArea-Element im FX-Thread (Mitglied dieser fx-Klasse) befindet.
Auch ich habe keine Probleme, eine Alarmbox auf einigen Knopf klicken, , aber um eine Alarm-Box aus einer anderen Klasse anzuzeigen- Ich habe Probleme seit, sobald ich versuche, eine Warnmeldung zu generieren, stürzt die Anwendung ab , sag nicht auf fx thread.
Ich verstehe, dass die Warnung ein Popup ist und daher möglicherweise nicht behandelt wird. Aber kann mir jemand helfen, ich möchte dem Benutzer eine Alarmbox aus verschiedenen Klassen zeigen.
Jede Klasse jede JavaFX Klasse oder Methode aufrufen frei ist, aber das Anruf hat auf der Java-FX-Thread ausgeführt werden, egal welche Klasse macht die Anruf. Wenn Sie nicht möchten, dass eine bestimmte Klasse Platform importiert, schreiben Sie eine Methode in eine andere Klasse, die Platform.runLater verwendet, und rufen Sie die Methode "non fx" auf. – VGR