gpt4 book ai didi

java - 在处置监听器中运行作业时出现 IllegalStateException

转载 作者:行者123 更新时间:2023-12-01 11:11:09 25 4
gpt4 key购买 nike

我有一个处置监听器,其中有一个在 widgetDispose(DisposeEvent event) 方法内创建的作业。因此,在 TreeViewer 被释放时执行此方法会导致“清理作业”期间发生内部错误。请求服务生命周期之外没有可用的上下文。此代码由 RCP 和 RAP 使用,在 RCP 应用程序上运行良好。问题与 RAP 相关。任何人都可以建议这出了什么问题吗?

private void addDisposeListener() {
treeViewer.getTree().addDisposeListener(new DisposeListener() {

@Override
public void widgetDisposed(DisposeEvent event) {
Job CleanupJob = new Job("Cleanup Job") { //$NON-NLS-1$

@Override
protected IStatus run(IProgressMonitor arg0) {
doCleanup();
return Status.OK_STATUS;
}
};

CleanupJob.setUser(false);
CleanupJob.setSystem(true);
CleanupJob.schedule();

}
});
}

最佳答案

似乎 RAP 尝试在当前 UISession 的上下文中执行在 UI 线程中创建的作业(请参阅 rap.ui.workbench 中的 JobManagerAdapter)。但是,在您的特定情况下,作业预计将在应用程序(“系统”)范围内执行。

如果小部件因 session 终止而被处置,则此作业将在 session 终止后运行。这可以解释该错误。

我建议您提交 bug针对 RAP 并包含堆栈跟踪。

与此同时,您可以考虑使用作业进行清理的替代方案。例如,当清理是一项全局任务时,您可以拥有一个由处置监听器通知并异步安排清理的“清理代理”。

关于java - 在处置监听器中运行作业时出现 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32356737/

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