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

标签 java swt runnable

我遇到了可怕的事情......

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

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

我在“提交”按钮上有一个监听器,由于应用程序将对各种 url 进行的处理量很大,我想启动一个新线程。

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

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);

谢谢

最佳答案

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

示例:

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

关于Java - SWT - 单击提交按钮后可运行新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9774699/

相关文章:

java - 如何在 Java 中的链表上使用两个不同的迭代器?

java - SWT 组合 MouseDown 事件未正确触发

java - 程序在Eclipse中运行,导出的可运行jar文件打不开?

java - 如何检查当前Java版本是否高于1.6

java - Android 开机接收器崩溃

java - 如何使用 SWT/Eclipse 在 Mac OS X 中执行 jar?

java - 让 JFace 窗口在任务栏中闪烁或引起用户注意?

java - ThreadpoolExecutor 具有重试能力,并在任务失败多次后关闭

java - 在循环内运行一次进程,而无需重复该进程,直到被告知

java - 如何在java中杀死一个线程?