Eclipse plugin 从resourcechangeListener打开新shell

Eclipse plugin 从resourcechangeListener打开新shell,eclipse-plugin,Eclipse Plugin,我已经在我的插件中添加了一个资源更改侦听器。从这个侦听器类中,我想使用MessageDialog向用户显示一条消息。代码如下: public class MyResourceChangeListener implements IResourceChangeListener { public void resourceChanged(final IResourceChangeEvent event) { MessageDialog.open

我已经在我的插件中添加了一个资源更改侦听器。从这个侦听器类中,我想使用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

您能指出代码中的错误并建议正确的方法吗。

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

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

正如该方法所说,它是一个异步调用,因此不要期望它阻止您的方法执行。

在上面的运行方法中,我想打开一个问题对话框,并在resourceChanged mathod中使用返回的布尔值。请建议一种方法。您可以将代码放入run()方法中。因为MessageDialog阻止了与UI的交互,所以它不应该是一个问题。