Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse 无法使用作业取消缩放操作_Eclipse_User Interface_Canvas_Eclipse Rcp_Draw2d - Fatal编程技术网

Eclipse 无法使用作业取消缩放操作

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

我正在开发一个EclipseRCP应用程序。 我有一个
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
。我对此一无所知。