您好我需要将GUI从SWT升级到JavaFX并在开始时直接遇到问题。 主类继承自Thread,并从某个方法(接口实现)运行:
@Override
public void mStart() {
this.start();
}
@Override
public void mStop() {
this.shell.dispose();
}
我的FX GUI是使用SceneBuilder创建的。 问题是如何管理Controller在不同的线程中启动,因为它会自动实例化?
答案 0 :(得分:3)
经过一番研究后得出的结论是: JavaFX应用程序可以作为非FX应用程序的不同线程运行,只需要实现Runnable并将launch()方法插入run()。然后offcourse在负责启动GUI的线程上执行start()。 然后,如果想要从不同的线程中更新您的控件(按钮,标签,面板等),您必须执行以下操作:
Platform.runLater(new Runnable() {
@Override public void run() {
//Update UI here
}
});
答案 1 :(得分:1)
好吧,我从未使用过Scene Builder或SWT,但有一点我确定:
JavaFX应用程序线程负责处理任何现有的JavaFX元素。您可以找到有关如何正确处理JavaFX元素here的详细信息。我认为您必须要确保使用JavaFX应用程序线程访问JavaFX元素,您可以使用Platform类中的runLater方法来执行此操作。看看:
与往常一样,我们知道应该从Java程序的主线程启动JavaFX应用程序。您可以做的是在SWT应用程序的任何位置使用主线程来调用主JavaFX类的启动器。例如,在您的SWT应用程序的某一点上,您所要做的就是致电launch。
但是,不要忘记,在JavaFX应用程序完成之前,主线程(应该调用launch的线程)将被锁定。
希望这会有所帮助,祝你好运。 :)