在我的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");
}
});
答案 0 :(得分:1)
对Thread.join
的调用阻止了UI线程,导致它停止响应。在发生这种情况之前,究竟有多少更新取决于每个平台上SWT实施的详细信息。
代码完成后,您应该从后台线程更新UI。
类似的东西:
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent arg0) {
statusLabel.setText("Running...");
Thread background = new Thread() {
@Override
public void run() {
// Long running task
// Update UI from background thread
Display.getDefault().asyncExec(() -> statusLabel.setText("Finished"));
}
};
background.start();
}
});