Mic*_*hel 7 java swt agents-jade
这是我在StackOverflow上的第一个问题(抱歉我的英文).我会尽力解释这个问题.
我有一个带有前景玉应用程序的swt应用程序,其中我有一个进度条来通知应用程序的持续时间.要刷新此进度条,我使用:
if(Display.getCurrent() != null) {
progress.run();
}
else {
sShell.getDisplay().syncExec(progress);
}
Run Code Online (Sandbox Code Playgroud)
进展是:
Runnable progress = new Runnable() {
public void run () {
if (progressBar.isDisposed ())
return;
int percentage= (numStep*100)/maxSteps;
progressBar.setSelection(percentage);
if (numStep >= maxSteps){
label1.setText("The simulation has been completed.");
button.setEnabled(true);
}
}
};
Run Code Online (Sandbox Code Playgroud)
我试着分析这个Runnable所花费的时间并且它是恒定的,但是当我分析这条线sSehll.getDisplay().syncExec(progress)需要不同的时间(从0ms到XXXXms)
我读过这个
syncExec(Runnable runnable)导致当前线程(如果它与显示器的用户界面线程不同)等待runnable完成.
但是Runnable是时间常数......
有人可以指导我吗?我不明白为什么有时需要3分钟和其他时间.
谢谢
根据Display课程文档,syncExec:
导致用户界面线程在下一个合理的机会调用可运行对象的 run() 方法。调用此方法的线程将被挂起,直到可运行完成。指定 null 作为可运行对象只会唤醒用户界面线程。
因此,您的run方法在恒定时间内运行,但Display对象可能并不总是立即调用它。
| 归档时间: |
|
| 查看次数: |
5606 次 |
| 最近记录: |