Eclipse 外掛程式開發

來源:互聯網
上載者:User

1.Eclipse 簡介和外掛程式開發

Eclipse 是一個很讓人著迷的開發環境,它提供的核心架構和可擴充的外掛程式機制給廣大的程式員提供了無限的想象和創造空間。目前網上流傳相當豐富且全面的開發工具方面的外掛程式,但是 Eclipse 已經超越了開發環境的概念,可以想象 Eclipse 將成為未來的整合的案頭環境。目前的 Eclipse 本身就具備資源管理和外部程式的功能,加上無所不能的外掛程式,將構成一個豐富多彩的工作環境而不僅僅是一個 IDE。對於程式員來說,沒有什麼比可以隨心所欲的定製的工作環境更重要,你的決心,勇氣和創造力在與別人分享成果的過程中一覽無餘。好了,你是不是心動了,如果你已經對 Eclipse 有一定的認識,那麼,和我一起打造自己的個人化工作環境吧,首先我們一起開發一個天氣預報的外掛程式,然後我們打造屬於自己的郵件快速監控功能。

以下的工作基於一定的前提,那就是你是一名 Java 程式員,你很欣賞並正開始使用 Eclipse 這個超酷的工作環境,別忘了下載最新版的 Eclipse3.0,本文基於 Eclipse3.0 開發。

回頁首

2. 天氣預報外掛程式

如果你已經厭倦了總是要登入某些網站從相關網頁上擷取資訊,這裡有一個讓你通過 Eclipse 快速擷取資訊的新方法。讓我們從頭開始,做一個屬於自己的天氣預報外掛程式吧,你的 Eclipse 將具有天氣預報功能,是不是很酷呢。

在這一部分,我們將要實現一個 Eclipse 外掛程式,他可以在任何我們想知道的時候通過簡單的點擊滑鼠告訴我們本地區的天氣預報,這當然很刺激。對於一個程式員而言,事情就應該如此。讓我們開始吧,我們首先要定義一個外掛程式,把他加到菜單和工具列中。對於沒有外掛程式開發經驗的你,可以參考《 開發 Eclipse 外掛程式》,樹立基本的外掛程式開發意識,當然,本文將詳細的輔助你完成這一創造性的工作。

2.1 最基礎的外掛程式

你可以完全參考《 開發 Eclipse 外掛程式》的外掛程式樣本,製作你的第一個 hello Eclipse 外掛程式,幸運的是,Eclipse3.0 完全考慮到你的需求,通過菜單 File -> New-> Other ->Plug-in Project,輸入項目名稱,next 出現對話方塊,只要在外掛程式名處輸入"muplugin",next 以後選擇 "Hello,World"的外掛程式模板你可以直接建立一個名為 myplugin 的最簡單的外掛程式,但其實我們的天氣預報並不比它複雜多少,建完改外掛程式以後的效果如下圖。
 

現在,將項目作為運行時工作台運行(run - run as runtime workbench),在一個全新的 Eclipse 視窗中,通過點擊菜單 sample menu 的 sample Action 或者工具列中的圓形 Eclipse 表徵圖,你將看到如下效果的對話方塊。
 

到此為止,天氣預報外掛程式的原始版做成了,通過修改 plugin.xml,我們將菜單改成中文形式,需要修改的地方就 2 處,詳見表格。

               <actionSet             label="Sample Action Set"            visible="true"            id="myplugin.actionSet">          <menu                label="我的空間"               id="sampleMenu">             <separator                   name="sampleGroup">             </separator>          </menu>          <action                label="天氣預報"               icon="icons/sample.gif"               class="myplugin.actions.SampleAction"               tooltip="Hello, Eclipse world"               menubarPath="sampleMenu/sampleGroup"               toolbarPath="sampleGroup"               id="myplugin.actions.SampleAction">          </action>         

此時在運行時工作台,我們的菜單已經改變。
 

2.2 用 VisualEditer 製作天氣預報對話方塊

雖然菜單是天氣預報,但是我們需要的不是 hello Eclispe 對話方塊,我們需要的是告訴我們天氣的對話方塊,當然需要我們從頭開始,於是我們需要重新構建一個對話方塊,這個就需要 Visual Editor 來協助進行介面的開發(關於 Visual Editer 參考《 Build GUIs with the Eclipse Visual Editor project》) 。我們將使用 Visual Editor 實現一個 Swing 對話方塊,當然只用 VE 做一個對話方塊是有點大材小用,但是作為起點,已經合適了。

首先參考《 Build GUIs with the Eclipse Visual Editor project》構建 Visual Editer 開發環境,當一切準備齊全,滑鼠右鍵點擊 PackgeExpoler 中的 "muplugin.actions"java 檔案,從彈出式菜單中選擇 new->other->VisualClass,建立一個可視化的類,彈出介面如下圖:
 

選擇 next,然後在 name 中輸入 WeatherDialog,這個就是我們用來顯示天氣預報的 dialog

選擇該對話方塊的超類為 javax.swing.JDiaog, 點擊 Finish 按鈕。 等待一段時間後,我們的對話方塊就基本產生了,滑鼠點擊左上方表徵圖,直接輸入天氣預報就是對話方塊的標題,同時 我們可以看到左側的 VisualEditor 面板。
 

然後我們將該對話方塊於與剛才的天氣預報菜單串連 找到 SampleAction 的 run 函數,如下所示:

 public void run(IAction action) {  MessageDialog.openInformation(  window.getShell(), "Myplugin Plug-in", "Hello, Eclipse world");  } 

替換成如下代碼

     public void run(IAction action)     {         WeatherDialog wd=new WeatherDialog();         wd.setSize(400, 335);         wd.show();            }    

此時,點擊菜單運行,我們的對話方塊看起來象這個樣子,在此基礎上我們還要在上面增加天氣預報資訊
 

2.3 增加天氣預報功能
 

下面的部分是重點,我們將使用具有解析 Html 功能的 Swing 組件 JEditPane,來擷取網路上的現成的天氣預報資訊,根據上圖,從 VisualEditor 的面板中 Swing Components 組點擊 JEditPane,加入到對話方塊中。並修改對話方塊代碼使得最終的代碼如下:

 /*  * Created on 2004-9-23  * */  package myplugin;  import java.io.BufferedReader;  import java.io.InputStreamReader;  import java.net.URL;  import javax.swing.JDialog;  import javax.swing.JEditorPane;  /**  * <p>Title: WatherDialog</p>  * <p>Description: 這個是對話方塊類,用於顯示指定城市的當天的天氣預報 </p> * <p>Copyright: Copyright (c) 2004</p>  * <p>Company:UF SOFT</p>  * @author 趙勇 * @version 1.0  */  public class WatherDialog extends JDialog  {     String city="北京";         private JEditorPane jEditorPane = null;     /**      * This method initializes      * /     public WatherDialog(String city)     {         super();         this.city=city;         initialize();     }     /**      * This method initializes this      * @return void      */     private void initialize()     {         this.setContentPane(getJEditorPane());         try         {             // 構建 URL 對象            URL url =new URL("http://weather.news.sina.com.cn//cgi-bin/figureWeather/simpleSearch.cgi?city="+city);             String temp="";             BufferedReader in                  = new BufferedReader(new InputStreamReader(url.openStream()));            // 使用 openStream 得到一輸入資料流並由此構造一個 BufferedReader 對象            String inputLine;             // 從輸入資料流不斷的讀資料,直到讀完為止            while ((inputLine = in.readLine()) != null)                 temp=temp+inputLine+"\n";             // 關閉輸入資料流            in.close();              String  weather                      =temp.substring ( temp.indexOf( "<body"),                                   temp.lastIndexOf( "body>")+5);                         this.jEditorPane .setText(weather);         }         catch (Exception e)         {             e.printStackTrace();         }         this.setTitle("天氣預報");         this.setSize(400, 166);             }     /**      * This method initializes jEditorPane          *          * @return javax.swing.JEditorPane          */        private JEditorPane getJEditorPane()     {         if (jEditorPane == null)         {             jEditorPane = new JEditorPane();             jEditorPane.setContentType( "text/html");         }         return jEditorPane;     }  }  //  @jve:decl-index=0:visual-constraint="70,19"

以上代碼中最關鍵的部分就是對話方塊中的 JEditorPane 對象,在初始化時,從一個 URL 擷取天氣預報資訊,表現為 Html 標記片段,不用解析,直接調用 JEditorPane 的 setText 方法,就可以將 Html 格式的資訊直接按解析過的方式顯示,也就是天氣預報資訊了,

此時 Action 中的調用需要做修改

     public void run(IAction action)     {         WeatherDialog wd=new WeatherDialog("北京");         wd.setSize(400, 335);         wd.show();            }    

現在以運行時工作台的方式運行,點擊天氣預報菜單,可以看到下圖:
 

如果你在上海或者其他城市,試著修改 city 參數為"上海",再次運行,你將發現,你仍然能夠得到該城市的天氣預報(這裡我們從網站上提取的資訊,有點投機取巧了)。值得注意的是,Xmethod 網站提供了一個天氣預報的 WebService,可惜只有美國的城市,不然我們可以使用 Web Service 調用擷取天氣預報,將會更酷。

現在運行是工作台已經具備了天氣預報的功能,還需要更進一步,將改外掛程式匯出發布,拷貝到 Eclipse 根目錄的 plugins 目錄中,重新啟動(具體參見 Eclipse 協助)。現在你自己的 Eclipse,就具備了天氣預報的功能,只要你點擊滑鼠,就可以在編程之餘輕鬆的擷取天氣資訊。 除非你的老闆認為你在工作時間隨時瞭解天氣情況不是一個好主意,我認為你完全可以將這個外掛程式納入個人收藏的外掛程式之列。你也可以在此基礎上擴充,增加一些設定檔和屬性設定,定製出滿足自己要求的外掛程式。如果能夠增加資訊的自動過濾和篩選,那將是一次很愉快的體驗,如果你有時間和興趣,不妨一試。

回頁首

3. 郵件快速監控外掛程式

現在你的工作因為 Eclipse 而更加愜意,更具創造力,那麼你還有什麼不滿。你是否厭倦了各種郵件用戶端隨時隨地的騷擾你呢。你希望你在高興的時候適時的瞭解一下郵件的概況。好了,既然想到了為什麼猶豫呢,因為你是程式員,你就是要用 Eclipse 享受完全 DIY 的樂趣。

3.1 產生外掛程式

本部分我們將在以上 myplugin 外掛程式的基礎上增加一個郵件過濾顯示的對話方塊,類似的我們通過 VisualEditer 建立一個名為 MailDialog 的對話方塊,並增加一個 JEditPane 用來顯示郵箱中我們關注的資訊。

修改 plugin.xml,增加一個"我的郵件"菜單

             <action                label="郵件資訊"               icon="icons/sample.gif"               class="myplugin.actions.MailAction"               tooltip="郵件資訊"               menubarPath="sampleMenu/sampleGroup"               toolbarPath="sampleGroup"               id="myplugin.actions.MailAction">          </action>         

現在,你知道要建立一個 MailAction 的 Action 類,並在 在 Run 中增加如下代碼

              MailConfig mail=new MailConfig();                 String popServer="server";         String popUser="zhaoyong";         String popPassword="1234";                 // 設定需要過濾的關鍵字:寄件者和郵件主題        String [] strFrom=new String[] {"zhaoyong"};         String [] strSubject=new String[] {"測試"};                 MailConfig[] mc =new MailConfig [] { mail };         MailDialog md=new MailDialog(mc);         System.err.println("run run run ") ;         md.setSize(400, 335);          md.show();         

以上的代碼編譯不會通過,但是別著急,慢慢來,很快了。

3.2 構建郵件監控對話方塊

當然你需要建立一個 MailConfig 類用來表示一個郵箱的具體設定已及相關資訊,這裡就不在累述說明,詳情參見參考資料中的代碼。需要說明的式 MailConfig 除了要記錄一個郵箱的地址,使用者名稱和密碼外,還提供 2 個關鍵字數組,如果為空白,不加過濾,如果關鍵字有值,系統會根據寄件者和郵件標題中是否包含關鍵字來進行顯示郵件資訊,已保證你的絕對自由。

首先我們需要實現一個 MailConfig 類,表示郵件配置,每個 MailConfig 的對象代表一個郵件帳戶,我們的系統將能顯示多個郵箱的配置,每個 MailConfig 中使用一個數組來儲存需要過濾的收件者和郵件地址。

MailConfig 類的中的變數如下:

        String popServer;     String popUser;     String popPassword;      // 設 置 需 要 過 濾 的 關 鍵 字 : 發 件 人 和 郵 件 主 題    String [] strFrom;     String [] strSubject;            // 是 否 顯 示 郵 件 內 容  boolean isViewContent=false;    

同樣,我們將使用一個對話方塊來顯示郵件資訊,MailDialog 需要引用 javaMail.jar, 和 activation.jar 這兩個類包,確保已經有這兩個類包並加入到項目的類路徑中。最後的 MailDialog 代碼如下:

 package myplugin;  import java.io.IOException;  import java.util.Properties;  import javax.mail.Folder;  import javax.mail.Message;  import javax.mail.MessagingException;  import javax.mail.Session;  import javax.mail.Store;  import javax.mail.internet.InternetAddress;  import javax.swing.JDialog;  import javax.swing.JEditorPane;  import javax.swing.JTextPane;  /**  * @author zhaoyong  *  * TODO To change the template for this generated type comment go to  * Window - Preferences - Java - Code Style - Code Templates  */  public class MailDialog extends JDialog  {         private JEditorPane jEditorPane = null;     private JTextPane jTextPane = null;         // 可以顯示多個郵件配置    MailConfig[]  mc= null;            /**      * This method initializes      * 建構函式     * @param mc : 需要顯示的多個郵箱設定物件。     */     public MailDialog(MailConfig[] mc)     {             super();               if(mc!=null)             this.mc = mc;         else             System.err.println("郵件配置錯誤。") ;                 initialize();     }     /**      * This method initializes this      * 初始化     * @return void      */     private void initialize()     {         try         {             // 設定顯示內容的面板            this.setContentPane(getJTextPane());             // 取得所有的新郵件資訊            String s= getAllMailInfo();                        // 將資訊顯示在對話方塊中            this.jTextPane .setText(s);                        this.setTitle("郵件資訊");             this.setSize(251, 100);         }         catch (Exception e)         {                    // 發生錯誤顯示錯誤資訊         this.jTextPane .setText(e.toString());             e.printStackTrace();         }             }     /** 取得所有的郵箱的需要監控的郵件資訊 *  * @return String  */     private String getAllMailInfo()     {      String allMailInfo="";          if (mc.length <1)      allMailInfo="沒有配置郵箱。";      else      {      for(int i=0;i<mc.length;i++)      {      // 迴圈擷取每個郵箱的郵件資訊     allMailInfo=allMailInfo+getMailInfo(mc[i]);      }      }      // 還沒有收到相關的郵件     if (allMailInfo.trim().length() ==0)      allMailInfo="未檢測到相關新郵件。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.