Eclipse 无法使用作业取消缩放操作
我正在开发一个EclipseRCP应用程序。 我有一个Eclipse 无法使用作业取消缩放操作,eclipse,user-interface,canvas,eclipse-rcp,draw2d,Eclipse,User Interface,Canvas,Eclipse Rcp,Draw2d,我正在开发一个EclipseRCP应用程序。 我有一个ScalableLayeredPane,上面有大约800个数字 我需要使用setScale()方法更改缩放值 我还想显示使用作业缩放的进度 我正在使用asyncexec方法调用setScale()函数。但是,我的GUI很饿,我不能同时单击取消按钮 在此方面的任何帮助都将不胜感激 这就是我正在做的 Job job = new Job("Some job") { @Override protected IStatus run(I
ScalableLayeredPane
,上面有大约800个数字
我需要使用setScale()
方法更改缩放值
我还想显示使用作业缩放的进度
我正在使用asyncexec
方法调用setScale()
函数。但是,我的GUI很饿,我不能同时单击取消按钮
在此方面的任何帮助都将不胜感激
这就是我正在做的
Job job = new Job("Some job") {
@Override
protected IStatus run(IProgressMonitor monitor) {
// Decide scaling amount
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
scalableLayeredPaneObj.setScale(scale); }
});
// Check if cancel is pressed and return status accordingly
if(monitor.isCanceled()) {
return Status.CANCEL_STATUS;
}
return Status.OK_STATUS;
}
};
job.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
if(event.getResult().isOK()) {
System.out.println("Job done!");
// Do something
} else {
System.out.println("Job cancelled!");
// Do something else
}
}
});
job.setUser(true);
job.schedule();
但是,当运行此特定代码时,GUI将变得无响应,并且无法按下“取消”按钮。我总是收到“完成工作!”
消息
我还尝试使用PlatformUI#getWorkbench()#getDisplay()#syncExec
方法来运行UI线程。那没用
我的分析表明,
setScale
操作本身花费了很长时间,因此GUI没有响应。我需要从另一个线程(如果可能)调用setScale
,以便Main
线程不会挂断。问题仅与setScale()
方法相关。由于画布大,setScale()
在UI线程中花费了很长时间
基本上,
作业
用于在后端执行非UI活动。对于UI活动,忙指示灯
是合适的。但是,因为我想取消缩放任务,所以我使用的是用户作业。问题可以通过使用忙碌指示器来解决,因此无法提供取消操作 您需要向我们展示一些代码来演示这个问题。@greg-449我已经添加了示例代码。你能帮帮我吗。我说你应该按照你的分析建议去做:)这个工作看起来不错,就像你说的那样,它可能是setScale
。我对此一无所知。