在我的 JavaFX 应用程序中,我想在从数据库加载数据时显示中间 ProgressIndicator。我尝试通过在主 BorderPane 中设置不同的 fxml 文件 (indicator.fxml)(包含具有中间属性的 ProgressIndicator)来解决此问题。然后,将所需的舞台设置到 BorderPane 中。
indicator.fxml 已显示,但似乎已卡住,因为它没有动画。 PersondataController controller = loader.getController() 需要一些时间才能完成。
@FXML
private void showPersonData(){
try{
FXMLLoader loader2 = new FXMLLoader();
loader2.setLocation(RootLayoutController.class.getResource("Indicator.fxml"));
AnchorPane progress = loader2.load();
mainApp.getRootLayout().setCenter(progress);´
Platform.runLater(new Runnable() {
@Override
public void run() {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(RootLayoutController.class.getResource("Persondata.fxml"));
PersondataController controller = loader.getController();
AnchorPane page = null;
try {
page = loader.load();
} catch (IOException e) {
e.printStackTrace();
}
mainApp.getRootLayout().setCenter(page);
}
});
}catch(Exception e){
e.printStackTrace();
}
有什么想法可以解决这个问题吗?
最佳答案
在你的帮助下终于解决了我的问题。谢谢你们。
我所做的不是 Platform.runLater() 的东西:
Service<Void> backgroundThread = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
FXMLLoader loader2 = new FXMLLoader();
loader2.setLocation(RootLayoutController.class.getResource("Persondata.fxml"));
PersondataController = loader2.getController();
page = loader2.load();
return null;
}
};
}
};
backgroundThread.setOnSucceeded((evt) -> {
mainApp.getRootLayout().setCenter(page);
});
backgroundThread.start();
关于java - Java中的并发(FX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32317787/