MessageDialog标题即将到来'无响应'

时间:2016-05-09 11:23:03

标签: eclipse eclipse-plugin

我正在执行一个长时间运行的操作并显示消息对话框"获取详细信息"并且一旦执行操作就关闭它。

try{
MessageDialog dialog = new MessageDialog(Display.getDefault().getActiveShell(), "Information", null, "Fetching Details...", MessageDialog.NONE , new String[] {}, -1);
dialog.setBlockOnOpen(false);
dialog.open();
//Schedule long Running operations

} finally{
  dialog.close()
}

如果操作需要更多时间,则对话框显示无响应(标题更改为"信息(无响应)")。

如何避免无响应状态?

1 个答案:

答案 0 :(得分:2)

您不能在UI线程中运行长操作。这样做会阻塞线程,直到完成并且UI将无响应。

在后台线程,Eclipse作业甚至Java 8 CompleteableFuture中运行您的操作。

使用后台代码中的Display asyncExec根据需要更新用户界面。

另一种方法是使用ProgressMonitorDialog

ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);

try {
  dialog.run(true, true, new IRunnableWithProgress() {
    @Override
    public void run(IProgressMonitor monitor) {
      monitor.beginTask("Task name", IProgressMonitor.UNKNOWN);
      try {
        // TODO your long running code
        // TODO check monitor.isCanceled() as often as possible
      }
      finally {
        monitor.done();
      }
    }
  });
} 
... catch exceptions