【发布时间】:2018-09-24 14:39:08
【问题描述】:
在我的 java swt 应用程序中,我有以下代码。在按钮选择上,我需要两次更改标签的文本,一次是在运行线程之前,另一次是在线程完成之后。它适用于 Windows,但在 Mac 上它不显示第一个文本。为什么这在 Mac 上不起作用?
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
statusLabel.setText("Running...");
Thread background = new Thread() {
@Override
public void run() {
// Long running task
}
};
background.start();
try {
background.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
statusLabel.setText("Finished");
}
});
【问题讨论】:
-
background.join将阻塞 UI 线程并且不会更新任何内容 - 您不能在 SWT 应用程序中等待这样的线程。 -
好的。即使我删除了 background.join statusLabel 也不会显示第一个文本。你知道我该怎么做吗?
-
好吧,如果您只是删除
join,该代码将立即将文本设置为已完成。当后台线程完成使用Display.asyncExec时,您已触发更新。 -
好的。但它在 Windows 上运行良好。
-
添加了建议代码的答案