【问题标题】:Java fx running on UI alternatives在 UI 替代品上运行的 Java fx
【发布时间】:2014-11-24 20:31:27
【问题描述】:

ayt.. 我有点担心,我的问题是 Platform.runlater() 是返回 UI 线程的唯一方法还是有任何替代方法..

-例如-

new Thread(new Runnable() {

        @Override
        public void run() {
            // i do something slick here

            Platform.runLater(new Runnable() { // is this the only way??

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                TextField txt =new TextField(" internal server error -Re-try");
                                root.getChildren().add(txt);
                            }
                        });

        }
    }).start();;

我想知道是否有其他方法..提前谢谢...

【问题讨论】:

  • 为什么你需要另一种方式来做同样的事情?
  • 嗯,多功能性或多功能性。但总而言之,我只是好奇这就是@James_D

标签: javafx javafx-2 javafx-8


【解决方案1】:

据我所知,没有其他方法。但是您可以通过绑定做一些有限的事情来有效地从另一个线程更改 UI,而无需调用 PlatForm.runLater() 示例:

Task task = new Task<Void>() {
    @Override public Void run() {
         for (int i=0; i<100; i++) {
            updateProgress(i, 100);
        }
        return null;
    }
};

然后在你的 GUI 中有一个进度条说:

ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();

bar.progressProperty().bind(task.progressProperty());

【讨论】:

  • 我认为updateProgress的内部实现,只是调用Platform.runLater来确保进度更新发生在JavaFX线程上,这样像绑定UI元素到进度属性这样的事情就不会导致线程化问题。因此,您在第一个声明中是正确的,即 Platform.runLater 是在 JavaFX 应用程序线程上运行的主要机制,而其他机制只是委托给它。很好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2011-02-19
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
相关资源
最近更新 更多