java - Java中的并发(FX)

标签 java concurrency javafx

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

相关文章:

java - AWSIotException : Cross account not allowed when trying to attach policy

java - 如何使用 Thread.sleep() 和 setBackground() 在 Swing 中创建闪光效果?

c++ - 如何停止正在阻塞的 win32 线程?

javafx - 更改图表颜色

java - 我可以有 2 个 Hibernate 配置 bdd 吗?

java - 我应该把什么作为上下文 - FFmpeg - Android/Java

android - Executors.newFixedThreadPool(size) 是要考虑 CPU 内核,还是我应该考虑。值得吗?

JavaFX WebView 白页(未加载)

java - GridPane JavaFx 中的冗余单元格

使用 IKVM 的 C# 库在 IKVM.OpenJDK.ClassLibrary 和 IKVM.OpenJDK.Core 之间存在命名空间歧义