Eclipse plugin 从resourcechangeListener打开新shell
我已经在我的插件中添加了一个资源更改侦听器。从这个侦听器类中,我想使用MessageDialog向用户显示一条消息。代码如下:Eclipse plugin 从resourcechangeListener打开新shell,eclipse-plugin,Eclipse Plugin,我已经在我的插件中添加了一个资源更改侦听器。从这个侦听器类中,我想使用MessageDialog向用户显示一条消息。代码如下: public class MyResourceChangeListener implements IResourceChangeListener { public void resourceChanged(final IResourceChangeEvent event) { MessageDialog.open
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的交互,所以它不应该是一个问题。