Java - как отправить событие в поток пользовательского интерфейса или вызвать функцию потока пользовательского интерфейса? - PullRequest
4 голосов
/ 02 апреля 2012

У меня есть код Java, который выглядит следующим образом:

//UI thread
//Some code
Job j = new Job(jobName) {

@Override
public IStatus run(IProgressMonitor monitor) {
try {
                    //Some code
                    SomeFunc();
                    //Some code
                    return Status.OK_STATUS;

    } catch(Exception e) {
    }
    finally {
    }
}
};
j.schedule();

Проблема в том, что SomeFunc(); должен вызываться из потока пользовательского интерфейса.

Я новичок в java, поэтому не могли бы вы помочь мне показать лучшие методы для публикации событий в потоке пользовательского интерфейса или вызова функции из потока пользовательского интерфейса?

Ответы [ 3 ]

4 голосов
/ 02 апреля 2012
EventQueue.invokeLater(new Runnable() { 
  @Override
  public void run() {
     // your UI code
  }
});

или вы можете использовать SwingWorker, его другой выбор: http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html

2 голосов
/ 02 апреля 2012

В SWT используйте Display.syncExec (), как в этот фрагмент или Display.asyncExec ().

0 голосов
/ 03 апреля 2012

Стоит взглянуть на учебник Eclipse Jobs and Background Processing от Lars Vogel. Есть хорошие примеры о том, как запускать код в потоке пользовательского интерфейса из Eclipse Jobs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...