我正在使用eclipse RCP應用程序。 我有一個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變得無法響應和取消按鈕不能被按壓。我總是收到"Job done!"
消息。
我也嘗試使用PlatformUI#getWorkbench()#getDisplay()#syncExec
方法來運行UI線程。這沒有用。
我的分析表明setScale
操作本身需要很長時間,因此GUI無法響應。我需要從另一個線程調用setScale
(如果可能),以便Main
線程不會掛斷。
您需要向我們展示一些展示問題的代碼。 –
@ greg-449我已添加示例代碼。你可以幫我嗎。 – SaurabhJinturkar
我說你應該做你的分析建議:) –