2013-08-03 35 views
0

我已經爲我的插件添加了資源更改偵聽器。從這個監聽器類中,我想使用MessageDialog向用戶顯示一條消息。下面是代碼:從resourcechangeListener打開新的shell

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 

能否請你指出什麼錯誤代碼,並建議以正確的方式來完成這件事。

回答

1

此錯誤表示您嘗試在非UI線程上運行UI代碼,這是不可能的。 用這個來的UI線程運行代碼:

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

正如方法說,這是一個異步調用,所以不要指望它來阻止你的方法執行。

+0

在上面的運行方法中,我想打開一個問題對話框,並在resourceChanged方法中使用返回的布爾值。請建議一種方法來做到這一點。 – Krishnaveni

+0

你可以把你的代碼放在run()方法中。由於MessageDialog阻止與UI的交互,因此它不應該成爲問題。 –