我正在使用小型机器在JavaFx ui中创建Java应用程序。我想显示加载页面,并在进度指示器进行期间加载数据文件。
我知道如果我在加载fxml文件和控制器的代码上添加Platform.runlater可以很好地工作,但是在javaFx主应用程序线程上使用Platform.runlater很奇怪。我检查了线程的名称,但它们是相同的。如果使用注释单独运行,它也可以工作。
我为什么需要使用Platform.runlater?
如果我不添加,加载图像会变成白屏并跳过图像,仅显示菜单视图。
//处理
// 1。设置加载页面图片
// 2。加载数据文件
// 3。加载下一页(菜单)
public void loadHomeMenuPage() {
setLoadingImage();
execLoadingData();
execLoadingView(this);
}
private void setLoadingImage() {
System.out.println("Load -> " + Thread.currentThread());
File file = new File("Resources/images/load.png");
InputStream is;
try
{
is = new FileInputStream(file);
this.logoImageView.setImage(new Image(is));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
private void execLoadingData() {
// load openCv files
new LoadOpenCV();
// load protocol files
new ProtocolLoader().load();
// load language pack here
}
private void execLoadingView(IController loadController) {
//Load homeMenu after loading all data
//Platform.runLater(() -> {
System.out.println(Thread.currentThread());
IController controller = (IController) FxmlUtils.LOAD
.fxmlPath(PathFxml.ABS_PATH_HOME_MENU_VIEW)
.pane("BorderPane")
.set2BaseBorderPane(this.baseBorderPane, "center")
.exec();
controller.setBaseBorderPane(this.baseBorderPane);
//});
}