我在Windows PC上使用带有JavaFX的Netbeans IDE和用于UI元素的材质设计库JFoenix编写了一个应用程序。在发现默认嵌入式JDK上Oracle不再支持JavaFX之后,我使用默认的程序包管理器(apt-get install openjfx)安装了OpenJFX。该应用程序按预期方式启动,但是UI元素表现得很慢。单击按钮时,动画仅部分显示,然后在更改场景前停滞。这些问题仅在Pi上运行时出现。
UI交互是在控制器中完成的,然后该控制器回发到主UI线程。
控制器中的代码如下:
@FXML
public void btnStart(ActionEvent e) {
main.goToEntry();
}
主线程中的代码:
public void goToEntry() {
try {
PPentryController entry = (PPentryController) replaceSceneContent("views/PPentry.fxml");
entry.setMain(this);
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
private Initializable replaceSceneContent(String fxml) throws Exception {
FXMLLoader loader = new FXMLLoader();
InputStream in = Main.class.getResourceAsStream(fxml);
loader.setBuilderFactory(new JavaFXBuilderFactory());
loader.setLocation(Main.class.getResource(fxml));
Parent page;
try {
page = loader.load(in);
} finally {
in.close();
}
Scene scene = new Scene(page);
stage.setScene(scene);
stage.setResizable(false);
return (Initializable) loader.getController();
}
是否有解决这些性能问题的方法?在单独的线程中运行replaceSceneContent()是否可以在更改场景时停止冻结主UI线程?