JavaFX显示加载对话框以进行更长的操作

猫抓

我在Controller类中进行了一些操作,这可能需要一些时间。因此,我想在此操作运行时显示一个加载对话框。

我尝试了这个:

Platform.runLater(new Runnable() {
  @Override
  public void run() {
     loadingDialog.show();
  }
});

Boolean opSuccess = myService.operate();

Platform.runLater(new Runnable() {
   @Override
   public void run() {
     loadingDialog.hide();
   }
});

if (opSuccess) {
   // continue
}

现在,问题是,从不显示loadingDialog。UI仅阻塞一段时间,然后继续“ // continue”。

如此看来,runLater调用已被阻塞操作(operate)阻塞了?

我还尝试了CoundDownLatch,以便在运行myService.operate()之前等待loadDialog.show()完成。但是latch.await()方法永远不会完成。

所以我的问题是,我如何显示loadingDialog直到myService.operate()完成并返回true或false?我是否必须将operate()调用放到另一个线程中并异步运行它?或者有更简单的方法吗?

感谢帮助。

gfkri

您确定整个代码都不会在JavaFX Thread中运行吗?控制器类的方法通常都可以使用,由于您的描述,我认为是可以的。

但是,最好使用Task类。在这里,您将找到您的应用程序的教程和简短代码段:

// here runs the JavaFX thread
// Boolean as generic parameter since you want to return it
Task<Boolean> task = new Task<Boolean>() {
    @Override public Boolean call() {
        // do your operation in here
        return myService.operate();
    }
};

task.setOnRunning((e) -> loadingDialog.show());
task.setOnSucceeded((e) -> {
    loadingDialog.hide();
    Boolean returnValue = task.get();
    // process return value again in JavaFX thread
});
task.setOnFailed((e) -> {
  // eventual error handling by catching exceptions from task.get()  
});
new Thread(task).start();

我假设使用Java 8,并且可以使用Lambda表达式。当然,没有它们也是可能的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaFX对话框

来自分类Dev

JavaFX对话框

来自分类Dev

jQuery UI模态对话框表单在发布操作后显示成功对话框

来自分类Dev

JavaFx对话框未显示所有内容文本

来自分类Dev

在对Struts 1进行操作之前确认对话框

来自分类Dev

在执行异步操作时显示模式对话框

来自分类Dev

AsyncTask在操作期间未显示对话框

来自分类Dev

在执行异步操作时显示模式对话框

来自分类Dev

加载图片时进度对话框未显示

来自分类Dev

在加载时显示输入文件对话框?

来自分类Dev

显示多个ajax请求的加载对话框

来自分类Dev

页面加载时显示“扩展库”对话框?

来自分类Dev

加载图片时进度对话框未显示

来自分类Dev

JavaFX警报对话框

来自分类Dev

HTML5模式对话框即将在页面加载时显示,如何停止此操作?

来自分类Dev

在Qt主事件循环中进行冗长的阻止操作时,可靠地显示“请稍候”对话框

来自分类Dev

显示独立对话框

来自分类Dev

显示对话框片段

来自分类Dev

显示重启对话框

来自分类Dev

全屏显示对话框

来自分类Dev

更新显示的对话框

来自分类Dev

显示消息对话框

来自分类Dev

Javafx警报对话框+ HTML

来自分类Dev

防止关闭JavaFX对话框

来自分类Dev

Javafx警报对话框+ HTML

来自分类Dev

JavaFX命令链接对话框

来自分类Dev

iOS中的“快速操作”对话框

来自分类Dev

对话框,如使用的完整操作

来自分类Dev

VSTO Outlook加载项对话框