到目前为止,在我看到的所有JavaFX示例中,代码都使用某种形式的线程,无论是通过扩展应用程序还是执行:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initAndShowGUI(); //arbitrary function
}
});
在主方法中。 我想知道是否有可能避免所有这些并创建一个可以在主类中调用的独立 JavaFX 类。 (主类确实使用线程(。
例如,我正在尝试绘制一些瓷砖,然后使用PerspectiveCamera。 但是,我希望创建的投影/视图编写在单独的类中,然后在主类中调用该类的实例。
如果您的代码正在接触/初始化 JavaFX 组件,那么它必须使用 JavaFX 平台线程。没有办法解决这个问题,JavaFX需要这种情况才能正常工作(否则您可能会遇到各种奇怪的线程相关错误。
Swing 也是如此,尽管在 JavaFX 中,这往往会被更彻底地执行,如果你从错误的线程中触摸到某些东西,就会抛出例外。这是一件好事,因为这种缺乏执行可能是大型摇摆项目中的噩梦 - 您可以轻松地花费数天时间将错误的源追溯到在错误线程上完成UI操作并且没有发出警告的点。
有一个(实验性的(VM 选项,你可以传递(-Djavafx.embed.singleThread=true
(,它合并了 Swing 和 JavaFX 平台线程,所以如果你同时使用这两个工具包,你就不需要在 UI 线程之间做太多的跳转。但是,在生产代码中使用它会给你带来危险。