2011-01-05 3 views

ответ

2

В SWT вы можете обращаться к ресурсам GUI только из потока отображения. Например, при установке текста в элементе управления org.eclipse.swt.widgets.Text вы должны уже быть в потоке дисплея или вызвать

 

     final Text text = ...; 
     Display.getCurrent().syncExec(new Runnable() { 
      @Override 
      public void run() { 
       text.setText("test"); 
      } 
     }); 
 
+0

Наконец-то я решил, что моя проблема решена. Ваше объяснение помогло мне разобраться в решении моей проблемы. При написании приложений SWT нам нужно позаботиться о том, чтобы не обращаться к элементам пользовательского интерфейса и не обновлять их в потоке, отличном от UI. – VINEEL

4

Это происходит, когда вы пытаетесь воздействовать на элемент интерфейса из потока, который не является потоком пользовательского интерфейса.

Для запуска кода в потоке пользовательского интерфейса вы должны использовать Runnable и попросить поток отображения запустить его. Таким образом:

Display.getDefault().syncExec(new Runnable() { 
    @Override 
    public void run() { 
     // Do your job here 
    } 
}); 

Как указано по методу Javadoc syncExec,

поток, который вызывает этот метод приостанавливается до работоспособных завершается.

Кроме того, вы можете проверить метод asyncExec.

+0

Наконец, я получил Моя проблема Resolved.Your объяснение помогло мне понять, решение к моей проблеме. – VINEEL

+1

Затем отметьте его как действительный ответ, пожалуйста. –

Смежные вопросы