gpt4 book ai didi

java - Display.getDefault().asyncExec 运行不正常

转载 作者:行者123 更新时间:2023-11-30 06:22:53 25 4
gpt4 key购买 nike

我正在使用 eclipse 的作业 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 inside Display thread 没有以可靠的方式执行,这意味着有时它会进入 run 方法而有时却不会,我尝试将断点放在 run 方法并对其进行测试,但同样发生。

我的问题是,我这样做是正确的方法吗?这是预期的行为吗?那么我该如何处理这种情况,即一旦 shouldShowDialog 为真,我该如何在显示线程中执行代码?

编辑:我在调试时观察到的一个行为是显示对话框但突然关闭,我认为它正在退出线程。

最佳答案

对话框消失的问题最常见的原因是使用当前 Activity 的 Shell 作为对话框的父级。例如。如果在您创建对话框时打开了一个 ProgressDialog,那么其他对话框将成为您对话框的父级。当其他对话框关闭时,您的对话框也会关闭。

相反,使用类似的东西:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();

关于java - Display.getDefault().asyncExec 运行不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18781759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com