Java SWT更改选定窗口小部件上的标签文本在Mac上不起作用

时间:2018-04-14 10:37:24

标签: java eclipse macos swt

在我的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");
        }
    });

1 个答案:

答案 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();
  }
});