<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks

            好像利用Eclipse自定義擴展點的人不多。

            在我以前做的項目中,用了自定義擴展點,但是使用這個擴展點的文件也在這個項目中,整個項目就是一個插件。所以,加載擴展點的方式很簡單:

     1IExtensionRegistry registry = Platform.getExtensionRegistry();
     2IExtensionPoint point = registry.getExtensionPoint(“org.eclipse.ui.popupMenus”);
     3IExtension[] extensions = point.getExtensions();
     4for (int i = 0; i < extensions.length; i++){
     5    IConfigurationElement[] elements = extensions.getConfigurationElements();
     6          for (int j = 0; j < elements.length; j++){
     7                String eleType = elements[j].getName();
     8                Class importantClass = Class.forName(element[j].getAttribute(MyConstants.ATTR_MODELCLASS)).newInstance();
     9                ……
    10          }

    11}

            在一個插件項目中,這樣的代碼一點問題都沒有。

            但是,我現在的項目分為幾個插件,擴展點的定義放在了插件項目A中,相關的接口和擴展點實現收集器(這是我自己取的名字)也在A中,但是擴展點的實現是其他的插件,比如插件B就實現了A中定義的擴展點。那么他們之間的依賴關系是

    A  <----------  B

            換句話說,在A中看不到B中的代碼,那么問題就來了:上面那段代碼的第8行將會報出class not found的異常。

            如何解決這個問題?

            可能是我對Eclipse的核心代碼太不熟悉了,所以這個問題困擾了我很久。

            解決的方法是,將第8行替換為

    WorkbenchPlugin.createExtension(element, MyConstants.ATTR_MODELCLASS);

           這個方法將激活本次實現所在的插件項目的Bundle,問題就解決了。

         
    posted on 2005-12-14 14:04 hopeshared 閱讀(2269) 評論(8)  編輯  收藏 所屬分類: Eclipse

    Feedback

    # re: 從擴展點中load class 2005-12-14 14:57 SimonLei
    element.createExecutableExtension 就行了,不用那么復雜  回復  更多評論
      

    # re: 從擴展點中load class 2006-07-28 18:28 joan
    老兄,我剛接觸eclipse,現在正好用到自定義擴展點呀,可網上的資料也很少,看了ECLIPSE的幫助后只知道怎么編輯擴展點模式,但不知道你上面寫的那些代碼該放在什么地方?能否給小妹發一份有關自定義擴展點和如何擴展的完整的資料呢,先謝了!郵箱是john_82@tom.com  回復  更多評論
      

    # re: 從擴展點中load class 2006-07-30 10:32 hopeshared
    @joan

    看看這個http://www.tkk7.com/hopeshared/archive/2006/07/25/59983.html  回復  更多評論
      

    # re: 從擴展點中load class 2006-07-31 12:28 joan
    @hopeshared
    謝謝你!看了你的那篇文章我明白了許多,但是還有個問題想請教一下:如果我在A插件自定義了一個擴展點X,在B.C或更多的插件擴展了這個擴展點,那我希望從插件A中能知道哪些插件擴展了X擴展點,以及從A中獲取B.C...插件里的一些文件,該怎么辦呢?
      回復  更多評論
      

    # re: 從擴展點中load class 2006-08-02 16:55 寒風
    期待hopeshared對樓上問題的解惑  回復  更多評論
      

    # re: 從擴展點中load class 2006-08-02 20:55 hopeshared
    回復joan

    我不明白你為什么會有這樣的疑問,因為這個帖子說的就是你問的這個問題,帖子中的代碼就是在A插件中找出所有擴展點X的實現

    IExtensionPoint point = registry.getExtensionPoint(“org.eclipse.ui.popupMenus”);
    得到A中定義的這個擴展點對象

    IExtension[] extensions = point.getExtensions();
    得到所有擴展點X的實現

    extensions[i]是擴展點X的一個實現

    IConfigurationElement[] elements = extensions[i].getConfigurationElements();
    將得到B,C的plugin.xml中如何實現該擴展點,也就是對應的那段xml

    elements[j].getAttribute("your attribute")得到這個屬性的值,如elements[j].getAttribute("targetID")就是指<... targetID="aaaa"/>將返回aaaa
    elements[j].getName()將返回這個元素的名稱,如<target .../>就該返回target,這兩個其實就可以看作DOM操作了

    你說的“從A中獲取B.C...插件里的一些文件”,那么你定義擴展點的時候就必須考慮,你需要什么文件,假如你需要一個類,<... targetClass="ClassA">,前面已經說明了如何得到"ClassA"這樣的字符串,我寫的這篇blog也是由于直接用Class.forName("ClassA")無法創建類的實例,那么用
    WorkbenchPlugin.createExtension(element, "targetClass");
    就可以了

    所以,你的問題,根源在于如何定義擴展點,而不是如何找出擴展點的實現。
      回復  更多評論
      

    # re: 從擴展點中load class 2006-08-07 12:48 joan
    @hopeshared
    呵呵,問題已經解決了,謝謝你!
      回復  更多評論
      

    # re: 從擴展點中load class 2006-08-17 01:32 寒風
    hopeshared,能否將‘如何定義擴展點’的東東發一些給我?謝謝
    tie212@163.com  回復  更多評論
      

    主站蜘蛛池模板: 亚洲人色婷婷成人网站在线观看| 成人免费观看一区二区| 免费又黄又爽的视频| 一本色道久久88—综合亚洲精品| 84pao强力永久免费高清| 久久亚洲国产中v天仙www| 成全视频在线观看免费| 亚洲AV日韩AV高潮无码专区| 最近免费中文字幕MV在线视频3| 亚洲s色大片在线观看| 日韩免费高清大片在线 | 日韩中文字幕免费| 亚洲欧好州第一的日产suv| 免费看的成人yellow视频| 亚洲AV无码成人精品区狼人影院| 国产免费av片在线播放| 午夜不卡AV免费| 亚洲中文字幕无码不卡电影| 在线观看片免费人成视频播放| 亚洲大成色www永久网站| 在线免费观看你懂的| 亚洲AV日韩综合一区尤物| 国产婷婷高清在线观看免费| 四虎国产精品永免费| 九月丁香婷婷亚洲综合色| 最近免费视频中文字幕大全| 亚洲中文无码线在线观看| 日韩在线视频免费看| 又黄又大的激情视频在线观看免费视频社区在线 | 久久久久亚洲AV成人无码| 麻豆国产精品免费视频| 日韩国产欧美亚洲v片| 亚洲一区爱区精品无码| 国产精品久久永久免费| 精品亚洲成a人在线观看| 亚洲人成网站在线播放vr| 国产h视频在线观看网站免费| 朝桐光亚洲专区在线中文字幕| 亚洲日韩欧洲乱码AV夜夜摸| 男女免费观看在线爽爽爽视频 | 亚洲Av熟妇高潮30p|