Pra*_*mha 2 java multithreading eclipse-plugin
我正在使用eclipse的jobs API作为一项工作运行大任务,一旦任务完成我将boolean变量设置为true,如果该变量为true,我在UI线程中执行WizardDialog.我当前的代码如下所示:
Job longRunningJob = new Job("Long running job...") {
@Override
protected IStatus run(IProgressMonitor monitor) {
boolean shouldShowDialog = doLongRunningJob();
if(shouldShowDialog) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
//Will open wizard dialog here
WizardDialog wizardDialog = new WizardDialog(Display.getCurrent().getActiveShell(), new TestWizard());
wizardDialog.setBlockOnOpen(true);
wizardDialog.open();
}
});
}
}
}
longRunningJob.setUser(true);
longRunningJob.schedule();
Run Code Online (Sandbox Code Playgroud)
我的问题是run显示线程内部没有以可靠的方式执行,意味着它有时会进入运行方法,有时它不会,我尝试将断点放在run方法内并测试它但同样的情况发生.
我的问题是,我正在做的是正确的方法吗?这是预期的行为吗?那么如何处理这种情况,即一次shouldShowDialog是如此,我如何在Display线程中执行代码?
编辑:我在调试时观察到的一个行为是对话框显示但突然关闭,我认为它正在退出线程.
消失对话框的问题最常见的原因是使用当前活动的Shell作为对话框的父级.例如,如果在创建对话框时打开ProgressDialog,则其他对话框将成为对话框的父对象.当另一个对话框关闭时,你的对话也会关闭.
相反,使用类似的东西:
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
Run Code Online (Sandbox Code Playgroud)