【发布时间】:2018-04-11 18:54:14
【问题描述】:
试图摆脱这个 SWTException: Invalid thread access。从 JButton ActionListener 中生成。最终目的是让按钮打开浏览器窗口,导航到 URL,然后将 URL 带回打开对话框...
private static final Display display = Display.getDefault();
// Fired from JButton:
class ShowBrowserAction implements java.awt.event.ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// Place-holder UI Update...
display.asyncExec(new Runnable() {
public void run() {
System.out.println("Async task run");
}
});
// Blocking until UI element is done...
while (!display.isDisposed()) {
// Always gives a thread access error, but still calls async event:
if ( !display.readAndDispatch() )
display.sleep();
}
}
}
想法?
【问题讨论】:
-
我可以用 try/catch 包围 readAndDispatch ,它实际上似乎非常好。但这似乎是作弊,我想以后会回来困扰我。
-
看来,如果我将显示实例更改为 new Display() 而不是 Display.getDefault() 错误就会消失。但我不明白为什么会这样。 Display.getCurrent() 返回“null”,因此当前线程中似乎不存在活动显示...?
标签: java multithreading swt awt