使用SWT的进度条ProgressBar,在另一线程中一个数变化时进度条前进
时间: 2023-12-10 14:37:08 浏览: 128
可以通过在另一个线程中使用 `Display.asyncExec()` 方法来更新进度条。以下是一个示例代码:
```java
ProgressBar progressBar = new ProgressBar(parent, SWT.HORIZONTAL);
progressBar.setMinimum(0);
progressBar.setMaximum(100);
new Thread(() -> {
for (int i = 0; i <= 100; i++) {
try {
Thread.sleep(1000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
final int value = i;
Display.getDefault().asyncExec(() -> {
if (!progressBar.isDisposed()) {
progressBar.setSelection(value);
}
});
}
}).start();
```
在上面的代码中,我们创建了一个 `ProgressBar` 控件,并设置了最小值和最大值。然后,在另一个线程中,我们使用 `Thread.sleep()` 方法模拟了一个耗时操作,并在每次操作完成后使用 `Display.asyncExec()` 方法更新进度条的值。注意,我们使用 `isDisposed()` 方法检查进度条是否已经被销毁,以避免在窗口关闭后仍然更新进度条的错误。
阅读全文