2017-03-02 28 views
0

我開發圖形插件,在打開當前文件中使用對象的變化。如果我更改打開的文件,我希望圖形會更新。 現在,我在擴展ViewPart的類中使用setFocus()方法,並在每次調用此函數時更新圖形。 這不是我想要的,我只想在資源更改時更新圖表。 我發現這個鏈接:插件開發:監聽資源在插件

link to similar question

This is like my question, but there is no answer

我需要把下面的代碼在我的插件?:的activator.java文件

IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
    IResourceChangeListener listener = new IResourceChangeListener() { 
     public void resourceChanged(IResourceChangeEvent event) { 
     System.out.println("Something changed!"); 
     } 
    }; 
    workspace.addResourceChangeListener(listener); 

    //... some time later one ... 
    workspace.removeResourceChangeListener(listener); 

如果我需要添加這個代碼,放在哪裏?在哪種方法把它放在activator.java文件中? 如果不是,我需要做什麼?

回答

1

在視圖部分createPartControl設置監聽器。

的活化劑是不是一個合適的地方設置爲當插件一些其他的代碼運行時,它只能運行聽衆。

+0

不要忘記在視圖關閉時也刪除監聽器。 – nitind

+0

監聽器在這個問題中調用兩次[類似問題](http://stackoverflow.com/questions/23875766/iresourcechangelistener-being-called-twice-with-one-change)。我正在刪除方法dispose()中的監聽器(我在IWorkbenchPart的API中看到,我需要從工作臺中註銷所有監聽器)。我沒有弄清楚它爲什麼要調用兩次(我打印了這個事件,它在兩次調用中都是org.eclipse.core.internal.resources.Workspace )。在第一個調用中,它甚至可以給監聽者打電話3次! – RoG

+0

另外,偵聽器只捕捉當前文件中的變化。但是如果我選擇另一個文件,監聽程序不會捕獲到我在另一個文件中,並且視圖中的圖形是我查看的前一個文件的圖形,除非我更改新文件並保存它,然後才能識別新文件。你知道我需要哪個聽衆嗎?非常感謝你! – RoG