Java - SWT - Новый запускаемый при нажатии кнопки отправки - PullRequest
0 голосов
/ 19 марта 2012

Я становлюсь страшным ...

Exception in thread "Controller Thread" org.eclipse.swt.SWTException: Invalid thread access

Краткий обзор того, что я пытаюсь сделать:

У меня есть прослушиватель на кнопке "Отправить", я хотел бы начать новый поток из-за объема обработки, выполняемой приложением с различными URL-адресами.

Это часть моего кода в слушателе кнопки Submit ...

submitButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent arg0) {
                try {
                    // Check to see if http field is valid
                    httpValid = checkHttp(http);
                    if (httpValid) {
                        Thread t = new Thread(new UIMain(), "Controller Thread");
                        t.start();      
                    } else {
                        System.out.println("Not a Valid http");
                    }

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

Вот мой метод бега ...

public void run() {
        options = new Options();
        setOptions(options);
        Controller run = new Controller(options);
    }

Ошибка указывает на строку "setOptions (options)" options - это объект, содержащий некоторые данные из полей SWF, которые будет вводить пользователь. setOptions довольно прост, в этой функции я собираю данные из полей SWF и устанавливаю их в объекте.

Дайте мне знать, если мне понадобится еще написать код ...

Пример кода, который я делаю в setOptions (options) ...

String url = http.getText();
options.addUrl(url);

Спасибо

1 Ответ

2 голосов
/ 19 марта 2012

Вы не можете получить прямой доступ к интерфейсу пользователя SWT из отдельного потока.Скорее всего, вам следует выполнить асинхронный вызов из этого отдельного потока с помощью API отображения.

Пример:

Display.getDefault().asyncExec(new Runnable() {
    @Override
    public void run() {
        // access the SWT UI
    }
});
...