ich eine JavaFX-Anwendung haben, die damit verbunden mehrere Methoden hat, und es ist eine Methode, wie alles, was wieAufruf Platform.runLater für mehrere Aufgaben in JavaFX-Anwendung
DFF
Lookup
Profile
Everything
Everything
fordert alle diese Methoden alle Methoden aufruft Ich versuche Threading auf Everything
Methoden zum Aufruf dieser Methoden zu implementieren und dann nach der List
s Popuplated übertrage ich das Steuerelement in eine andere fxml, um es in der Tabellenansicht mit Registerkarte anzuzeigen.
public void runEverything(){
List<Task> tasks = new ArrayList();
Task task = new Task() {
protected Object call() throws Exception {
dataAOL = aol.getAolReport(InstanceController.validateto, InstanceController.validatefrom, pattern.getText());
System.out.println("Method"+AOLScreenController.dataAOL.size());
return null;
}
};
Task task1 = new Task() {
protected Object call() throws Exception {
dataProfile = aol.getAolReport(InstanceController.validateto, InstanceController.validatefrom, pattern.getText());
System.out.println("Method"+AOLScreenController.dataAOL.size());
return null;
}
};
tasks.add(task);
tasks.add(task1);
ExecutorService threadPool = Executors.newFixedThreadPool(5);
for (Task t : tasks) {
threadPool.submit(t);
}
threadPool.shutdown();
}
Ich brauche nur einmal die Platform.runLater
Methode aufrufen, nachdem alle Threads die Ausführung beendet haben, so dass ich die fxml Ansicht laden und in den Mitteln, während ein Fortschrittsbalken Schleife in der neuen fxml und ui wird hinken nicht. aber ich weiß nicht, wo mein Platform.runLater
Code platzieren
Platform.runLater(new Runnable() {
@Override public void run() {
try {
Parent parent = FXMLLoader.load(getClass().getResource("AolRun.fxml"));
SmartCC.fxmlval.add("AOLScreen.fxml");
SmartCC.stageval.add((Stage) run.getScene().getWindow());
Stage stage = new Stage();
stage.initStyle(StageStyle.UTILITY);
stage = (Stage) run.getScene().getWindow();
Scene scene = new Scene(parent);
stage.setScene(scene);
scene.getStylesheets().add("/css/Style.css");
stage.setTitle("AOL Output ");
stage.setResizable(false);
stage.show();
} catch (IOException ex) {
Logger.getLogger(AOLScreenController.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
Wenn ich es in der letzten Aufgabe platzieren gibt es Thread-Synchronisation Fehler und ich weiß nicht, darüber.
Ich bin sehr neu zu Threads und Javafx Themen bitte helfen
Entschuldigen Sie, dass wir diesen Fabian fragen, aber was müssen wir bei jeder dieser Aufgaben zu dieser Methode hinzufügen und warum auch nicht? using platform.runlater method here –
@RahulSingh 'Task' stellt sicher, dass der' onSuceeded' Handler-Code auf dem JavaFX-Anwendungsthread ausgeführt wird, was Sie auch erreichen, indem Sie 'Platform.runLater' verwenden. Außerdem müssen Sie dies zu jeder Aufgabe hinzufügen, um zu wissen, wann die letzte beendet ist (AFAIK, wenn Sie den Code für die Bühnenerstellung aufrufen möchten). – fabian
Danke, es funktioniert, aber ein Problem hier ist, dass 9 von 10 mal funktioniert, aber manchmal ist es dort stecken Thread Probleme Synchronisierung hier, als wenn ich es auf eine Aufgabe stecken und nicht vorwärts bewegen. –