1
我正在開發一個Eclipse插件和麪臨的問題:關閉Eclipse編輯器,當資源已被刪除
假如你有好幾個編輯器打開,你右鍵點擊「項目管理器」項目,然後將其刪除。什麼是乾淨的方式來通知所有相關的公開編輯,以便他們應該關閉並從視圖中刪除?實際上在刪除項目時,所有的編輯都保持開放狀態。
任何想法,將不勝感激:)
我正在開發一個Eclipse插件和麪臨的問題:關閉Eclipse編輯器,當資源已被刪除
假如你有好幾個編輯器打開,你右鍵點擊「項目管理器」項目,然後將其刪除。什麼是乾淨的方式來通知所有相關的公開編輯,以便他們應該關閉並從視圖中刪除?實際上在刪除項目時,所有的編輯都保持開放狀態。
任何想法,將不勝感激:)
這裏是我的靛藍,其中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的默認行爲並不是在項目關閉時關閉編輯器。
考慮使用'getSite()。getPage()。closeEditor(this,false)''而不是通過他們的'IEditorInput'來尋找編輯器。 – Basilevs
其實我知道有一個IResourceChangeListener監聽資源PRE_CLOSE/PRE_DELETE/POST_CHANGE等等。但是我需要在編輯器端處理這個問題,所以只要它的父項(項目)已從工作空間中刪除,就應關閉後者。謝謝 –