我遇到了可怕的事情......
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/