Java - SWT - 点击提交按钮后新的可运行

时间:2012-03-19 17:15:57

标签: java swt runnable

我变得可怕......

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

快速概述我要完成的任务:

我在提交按钮上有一个监听器,我想开始一个新的线程,因为应用程序将对各种网址进行处理。

这是我在提交按钮监听器中的代码的一部分...

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 个答案:

答案 0 :(得分:2)

您无法直接从单独的线程访问SWT UI。您应该做的是使用Display API从该单独的线程执行异步调用。

示例:

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