gpt4 book ai didi

java - Java中的并发(FX)

转载 作者:行者123 更新时间:2023-11-30 07:58:22 26 4
gpt4 key购买 nike

在我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com