0

我在我的插件中添加了一个资源更改侦听器。从这个监听器类中,我想使用 MessageDialog 向用户显示一条消息。下面是代码:

public class MyResourceChangeListener implements IResourceChangeListener {
    public void resourceChanged(final IResourceChangeEvent event) {                
         MessageDialog.openWarning(new Shell(),"some thing","something");
    }
}

当我执行此代码时,我收到以下错误:

org.eclipse.swt.SWTException: Invalid thread access

您能否指出代码中的任何错误并建议完成此操作的正确方法。

4

1 回答 1

1

此错误意味着您试图在非 UI 线程上运行 UI 代码,这是不可能的。使用它在 UI 线程上运行您的代码:

Display.getDefault().asyncExec(new Runnable() {
    @Override
    public void run() {
          MessageDialog.openWarning(new Shell(),"some thing","something");
    }
});

正如方法所说,它是一个异步调用,所以不要指望它会阻止你的方法执行。

于 2013-08-03T09:50:45.013 回答