我有一个JavaFX应用程序,它附加了几个方法,并且有一个方法,如调用所有方法的所有方法
DFF
Lookup
Profile
Everything
Everything
呼吁 Everything
方法来调用这些方法所有的这些方法我想实现线程再经过 List
s的popuplated我的控制转移到另一个FXML使用标签窗格表视图中显示它 .
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();
}
所有线程完成执行后,我只需要调用 Platform.runLater
方法一次,这样我就可以加载fxml视图,同时进度条会在新的fxml中循环,ui也不会滞后 . 但我不知道在哪里放置我的 Platform.runLater
代码
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);
}
}
});
如果我把它放在最后一个任务中,就会出现线程同步错误,我不知道 .
我很新线程和javafx线程请帮忙
1 回答
您只需在任务中添加
onSucceded
处理程序即可 . 成功完成任务后,此处理程序在应用程序线程上运行: