2013-07-02 41 views
1

我正在開發一個Eclipse插件和麪臨的問題:關閉Eclipse編輯器,當資源已被刪除

假如你有好幾個編輯器打開,你右鍵點擊「項目管理器」項目,然後將其刪除。什麼是乾淨的方式來通知所有相關的公開編輯,以便他們應該關閉並從視圖中刪除?實際上在刪除項目時,所有的編輯都保持開放狀態。

任何想法,將不勝感激:)

+0

其實我知道有一個IResourceChangeListener監聽資源PRE_CLOSE/PRE_DELETE/POST_CHANGE等等。但是我需要在編輯器端處理這個問題,所以只要它的父項(項目)已從工作空間中刪除,就應關閉後者。謝謝 –

回答

1

這裏是我的靛藍,其中MyEditor監聽項目收尾事件的解決方案,如果其文件所屬的項目被關閉自行關閉。

public class MyEditor extends EditorPart { 
    private final Display display = Display.getCurrent(); 

    private IResourceChangeListener editorCloser = new IResourceChangeListener() { 
     public void resourceChanged(IResourceChangeEvent event) { 
      final IResource closingProject = event.getResource(); 
      Display.getDefault().asyncExec(new Runnable(){ 
       public void run() { 
        for (IWorkbenchPage page : getSite().getWorkbenchWindow().getPages()) { 
         FileEditorInput editorInput = (FileEditorInput) MyEditor.this.getEditorInput(); 
         if (editorInput.getFile().getProject().equals(closingProject)) 
          page.closeEditor(page.findEditor(editorInput), true); 
        } 
       } 
      }); 
     } 
    }; 

    public void init(IEditorSite site, IEditorInput input) throws PartInitException { 
     [...] 
     ResourcesPlugin.getWorkspace().addResourceChangeListener(editorCloser, 
      IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE); 
    } 

    public void dispose() { 
     super.dispose(); 
     ResourcesPlugin.getWorkspace().removeResourceChangeListener(editorCloser); 
    } 
} 

讓我困惑的是,Eclipse的默認行爲並不是在項目關閉時關閉編輯器。

+1

考慮使用'getSite()。getPage()。closeEditor(this,false)''而不是通過他們的'IEditorInput'來尋找編輯器。 – Basilevs

相關問題