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

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

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

    qiyadeng

    專注于Java示例及教程
    posts - 84, comments - 152, trackbacks - 0, articles - 34

    IBM推薦的的開發(fā)組合.

    http://www-128.ibm.com/developerworks/cn/kickstart/index.html

    posted @ 2006-04-04 09:16 qiyadeng 閱讀(804) | 評論 (1)編輯 收藏

    網(wǎng)上主要流傳有兩種方式實現(xiàn)系統(tǒng)托盤:
    1.Windows Tray Icon (http://jeans.studentenweb.org/java/trayicon/trayicon.html)
    shot-balloon.gif

    2.SysTray for Java (http://systray.sourceforge.net/)
    shot.png

    這兩個都是開源的...可以根據(jù)上面的下載.

    相對來說,我更喜歡SysTray for Java,原因很簡單,SysTray for Java實現(xiàn)了我所要的功能而且相對來說比Windows Tray Icon 要簡單.

    使用SysTray是很簡單的.下載下來的文件有個例子Example.java,照著這個實現(xiàn)你所需要的功能應(yīng)該不算困難.

    主要是菜單和按鈕的操作,和操作一般的JFrame一樣.

    下面是一個例子程序:

    package qiya.systray;

    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Rectangle;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;

    import snoozesoft.systray4j.SysTrayMenu;
    import snoozesoft.systray4j.SysTrayMenuEvent;
    import snoozesoft.systray4j.SysTrayMenuIcon;
    import snoozesoft.systray4j.SysTrayMenuItem;
    import snoozesoft.systray4j.SysTrayMenuListener;

    public class MainFrame extends JFrame implements ActionListener,
    ??SysTrayMenuListener {

    ?static final int INIT_WIDTH = 400;// 默認(rèn)窗口寬度

    ?static final int INIT_HEIGHT = 244;// 默認(rèn)窗口高度

    ?private static final String toolTip = "寬帶計費接口";// 提示文字

    ?static final SysTrayMenuIcon icon = new SysTrayMenuIcon("rocket.gif");// 圖片信息

    ?SysTrayMenu menu;// 菜單

    ?private JButton launchButton = new JButton();// 啟動按鈕

    ?private JButton exitButton = new JButton();// 退出按鈕

    ?private JLabel statusLabel = new JLabel();// 運行狀態(tài)

    ?public static void main(String[] args) {
    ??try {
    ???UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    ??} catch (ClassNotFoundException e) {
    ???e.printStackTrace();
    ??} catch (InstantiationException e) {
    ???e.printStackTrace();
    ??} catch (IllegalAccessException e) {
    ???e.printStackTrace();
    ??} catch (UnsupportedLookAndFeelException e) {
    ???e.printStackTrace();
    ??}

    ??new MainFrame();
    ?}

    ?public MainFrame() {
    ??super("寬帶計費接口");// 標(biāo)題
    ??setIconImage(new ImageIcon(getClass().getResource("rocket.gif"))
    ????.getImage());// 圖標(biāo)
    ??this.setLayout(null);
    ??this.setSize(new Dimension(INIT_WIDTH, INIT_HEIGHT));
    ??Dimension dimScreen = Toolkit.getDefaultToolkit().getScreenSize();
    ??int xPos = (dimScreen.width - INIT_WIDTH) / 2;
    ??int yPos = (dimScreen.height - INIT_HEIGHT) / 2;

    ??statusLabel.setText("系統(tǒng)狀態(tài)監(jiān)視");
    ??statusLabel.setBounds(new Rectangle(45, 35, 280, 40));
    ??statusLabel.setToolTipText("當(dāng)前系統(tǒng)的運行狀態(tài)");
    ??statusLabel.setFont(new Font("宋體", 0, 14));

    ??launchButton.setText("啟動");
    ??launchButton.setBounds(new Rectangle(80, 180, 80, 23));

    ??exitButton.setText("退出");
    ??exitButton.setBounds(new Rectangle(230, 180, 80, 23));

    ??this.getContentPane().add(statusLabel, null);
    ??this.getContentPane().add(launchButton, null);
    ??this.getContentPane().add(exitButton, null);

    ??launchButton.addActionListener(this);
    ??exitButton.addActionListener(this);

    ??this.setBounds(xPos, yPos, INIT_WIDTH, INIT_HEIGHT);

    ??icon.addSysTrayMenuListener(this);
    ??this.createMenu();
    ??this.setVisible(true);
    ?}

    ?/**
    ? * 創(chuàng)建菜單
    ? *
    ? */
    ?private void createMenu() {
    ??SysTrayMenuItem subItem1 = new SysTrayMenuItem("退出", "退出");
    ??subItem1.addSysTrayMenuListener(this);

    ??SysTrayMenuItem subItem2 = new SysTrayMenuItem("關(guān)于", "關(guān)于");
    ??subItem2.addSysTrayMenuListener(this);

    ??SysTrayMenuItem subItem3 = new SysTrayMenuItem("幫助", "幫助");
    ??subItem3.addSysTrayMenuListener(this);

    ??menu = new SysTrayMenu(icon, toolTip);// 生成菜單
    ??menu.addItem(subItem1);
    ??menu.addSeparator();
    ??menu.addItem(subItem2);
    ??menu.addItem(subItem3);
    ?}

    ?/**
    ? * 點擊按鈕事件
    ? */
    ?public void actionPerformed(ActionEvent e) {
    ??if (e.getActionCommand().equalsIgnoreCase("退出")) {
    ???System.exit(0);
    ??} else if (e.getActionCommand().equalsIgnoreCase("啟動")) {
    ???// 啟動計費程序

    ??}
    ?}

    ?/**
    ? * 菜單選擇事件
    ? */
    ?public void menuItemSelected(SysTrayMenuEvent e) {
    ??if (e.getActionCommand().equalsIgnoreCase("退出")) {
    ???System.exit(0);
    ??} else if (e.getActionCommand().equalsIgnoreCase("關(guān)于")) {
    ???JOptionPane.showMessageDialog(this, "寬帶計費接口" + "完成于2005-3-27");
    ??} else if (e.getActionCommand().equalsIgnoreCase("幫助")) {
    ???JOptionPane.showMessageDialog(this, "寬帶計費接口" + "幫助文件待寫...");
    ??}
    ?}

    ?/**
    ? * 左鍵單擊事件
    ? */
    ?public void iconLeftClicked(SysTrayMenuEvent e) {
    ??if (this.isVisible()) {// 如果可見,最小化
    ???this.setVisible(false);
    ??} else {// 如果不可見顯示出來
    ???this.setVisible(true);
    ??}
    ?}

    ?/**
    ? * 左鍵雙擊事件
    ? */
    ?public void iconLeftDoubleClicked(SysTrayMenuEvent e) {
    ??if (this.isVisible()) {// 如果可見,最小化
    ???this.setVisible(false);
    ??} else {// 如果不可見顯示出來
    ???this.setVisible(true);
    ??}
    ?}
    }


    tray.gif

    posted @ 2006-03-27 17:34 qiyadeng 閱讀(2964) | 評論 (2)編輯 收藏

    (Generic algorithms for Java)jga is a functors library: the intent is to explore and exploit functors as a design and implementation tool to reduce boilerplate coding. A functor is an object that encapsulates a function or expression: it can take arguments and produce results, as can any method, expression, or function (in other languages that support functions). Unlike an expression, as an object it can be passed as an argument without being executed; it can be persisted to a database or file; it can be serialized and passed from client to server (and back); and it can be instantiated at runtime based on information unavailable at compile-time.

    posted @ 2006-03-24 09:16 qiyadeng 閱讀(456) | 評論 (0)編輯 收藏

    美國聯(lián)邦法律規(guī)定:
     
      1)不得與豪豬發(fā)生性關(guān)系。(靠,誰敢呀) 
      2)每周四晚6:00以后不得放P。(以后還真要小心了,別一不留神坐牢了還不知為啥) 
      3)任何人不得銷售其子女。(好象中國也不許吧?) 


    阿拉巴馬州:
     
      無論任何時候,將冰激淋卷放在口袋里是違法的。(有病啊~~) 

      
    阿肯色州:
     
      男性可以合法毆打其配偶,但每月最多一次。 
      (估計很多暴力傾向的兄弟知道了一定想移民阿肯色了, 
      可也有例外呀,克林頓就是阿肯色的前州長,咋老被希拉里扁呀) 

      
    亞利桑納州:
     
      任何房間中不得有兩根以上的假陽具。 
      (估計那州的最高法官是個變態(tài)狂!) 

      
    夏威夷州:
     
      不得將谷物放在耳朵里。(神經(jīng)病,以為偷太空種子呀) 

      
    印弟安納州:
     
      1)任何年滿18歲的男性,若與17歲以下的女性發(fā)生性關(guān)系,而且當(dāng)時她又沒穿鞋襪,那將課重罪. 
      (兄弟們千萬注意了呀!別全了) 
      2)圓周率在該州法定為4。(活活氣死咱祖聰之前輩呀!) 

      
    愛荷華州:
     
      1)任何只有一只上臂的鋼琴演奏者必須免費演奏。(嚴(yán)重歧視殘疾藝術(shù)表演家) 
      2)任何有胃病的男性不得在公共場所與女性接吻。(接吻和胃有關(guān)系嗎?男性胃癌晚期患者的福音 

      
    紐約州:
     
      1)不得僅為娛樂而將球砸向他人腦袋。(謀殺可以不?真的腦子進(jìn)水了) 
      2)10:00以后不得穿拖鞋。(光腳吧) 

      
    新澤西州:
     
      凡謀殺時不得穿防彈背心。(管得著嗎,警察這么沒自信!) 

      
    北卡州:
     
      任何一位未婚男性與一為未婚女性,如果在任何旅館或汽車旅館登記為已婚,那么他們即算合法夫妻了。(想帶小蜜開房的兄弟們千萬別去那州呀!) 

      
    賓西法尼亞州:
     
      不得在浴室唱歌。(難怪在賓大商學(xué)院的同胞都不會K歌) 

      
    南卡州:
     
      僅在每周六,男性被允許在法院的門前臺階上合法毆打其配偶。(這是啥規(guī)定,郁悶ING) 

      
    猶他州:
     
      1)不喝牛奶違法。(喝不完援助非洲難民呀,干么為難自己! 
      難怪俺一只要喝牛奶就拉肚子的朋友從猶大轉(zhuǎn)到紐約了,保命要緊呀。) 
      2)不得在正在執(zhí)行急救任務(wù)的救護(hù)車后座上做愛。(這好理解,怕病人看見血管爆裂么!哈哈)

    posted @ 2006-02-26 22:11 qiyadeng 閱讀(183) | 評論 (0)編輯 收藏

    一、窮
    我想這已經(jīng)是共識,沒錢?那就別想談女朋友了,別再幻想著什么純潔無暇愛情了,都是扯淡。當(dāng)你憋著小嘴憤憤不平的拿這個詛咒分手女友的無情的時候,那只能說明你無能懦夫懶惰加上小人,離開你是明智選擇。給你個富婆說不定你絕情的嘴臉比誰都更丑陋。所以,男人,想討老婆就賺錢吧不管你混B社會殺人放火販毒contraband只要你能弄到票子女人就多得讓你眼花了。
    二、丑
    經(jīng)典語句,長得丑不是你的錯,出來嚇人就是你不對了,如果你敢說一句外表不是主要的,心靈美才是重要的,打住,那我就給你一頭豬一樣的恐龍做老婆我看你什么反映,己所不欲勿施與人,當(dāng)你做著癩蛤蟆想吃天鵝肉的美夢時,女孩還在走著灰姑娘的神呢。
    三、薄
    這個薄是臉皮薄的意思,如果你文質(zhì)彬彬,甚至?xí)π撸瞪档模闳绻皇莾?nèi)心真有點城府的話,那看來你跟異性也是絕緣了,別想著八十年代電影里女孩說傻的可愛了,時代不同了,并且進(jìn)步太快了。如果你能達(dá)到不要臉的流氓地步,也是泡妞的最高境界了。
    四、專
    這里指的是在一棵樹上吊死,如果你是個癡情專一的漢字,對一個MM渴望用堅持和癡情來感動,我想你離沉重打擊不遠(yuǎn)了,現(xiàn)在的MM才不喜歡你用情專一呢,如果你能到處沾花惹草正說明你的本事,MM雖然會幽怨,其實底子里才更看得起你呢。保證你召之即來,揮之即去。
    五、笨
    這里的笨是指嘴笨,不需要你多厲害的口才,但是甜言蜜語是要會說的,哪怕你心里想著另一個MM,口里把對這個MM的感情換個名字說給那個聽也行,愛的肉麻。
    六、真
    其實和五差不多,就是太真誠了,MM是要來騙和哄的,你傻傻的都說實話掏老底,嘿嘿,那你也等著MM和你拜拜吧!
    七、小
    此小非彼小,嘿嘿,是膽小,好像和三類似,但也不是,只要有機(jī)會,能拉手早拉手,拉了手了要趕快親,親完了趕快找地上床,不要覺得太快了,現(xiàn)在是個效率的社會,你不快有人比你快,也別擔(dān)心MM會覺得你輕浮,她比你還急呢。不信?等上了床你就知道了。
    八、跑
    專指看貼不回貼就跑了的人,這類也是找不到女朋友的,自己掂量吧!

    posted @ 2006-02-21 20:21 qiyadeng 閱讀(336) | 評論 (0)編輯 收藏

    目錄

      前言
      一. Java 文檔和 javadoc
      二. 文檔注釋的格式
        1. 文檔注釋的格式化
        2. 文檔注釋的三部分
      三. 使用 javadoc 標(biāo)記
        1. @see 的使用
        2. 使用 @author、@version 說明類
        3. 使用 @param、@return 和 @exception 說明方法
      四. javadoc 命令


    前言

      Java 的語法與 C++ 及為相似,那么,你知道 Java 的注釋有幾種嗎?是兩種?

      // 注釋一行
      /* ...... */ 注釋若干行

      不完全對,除了以上兩種之外,還有第三種,文檔注釋:

      /** ...... */ 注釋若干行,并寫入 javadoc 文檔

      通常這種注釋的多行寫法如下:

      /**
       * .........
       * .........
       */

      暫停,暫停!這第三種注釋有什么用?javadoc 又是什么東西?

      好,那就讓我告訴你——


    一. Java 文檔和 javadoc

      Java 程序員都應(yīng)該知道使用 JDK 開發(fā),最好的幫助信息就來自 SUN 發(fā)布的 Java 文檔。它分包、分類詳細(xì)的提供了各方法、屬性的幫助信息,具有詳細(xì)的類樹信息、索引信息等,并提供了許多相關(guān)類之間的關(guān)系,如繼承、實現(xiàn)接口、引用等。

      Java 文檔全是由一些 html 文件組織起來的,在 SUM 的站點上可以下載它們的壓縮包。但是你肯定想不到,這些文檔我們可以自己生成。——就此打住,再吊一次胃口。

      安裝了 JDK 之后,安裝目錄下有一個 src.jar 文件或者 src.zip 文件,它們都是以 ZIP 格式壓縮的,可以使用 WinZip 解壓。解壓之后,我們就可以看到分目錄放的全是 .java 文件。是了,這些就是 Java 運行類的源碼了,非常完整,連注釋都寫得一清二楚……不過,怎么看這些注釋都有點似曾相識的感覺?

      這就不奇怪了,我們的迷底也快要揭開了。如果你仔細(xì)對比一下 .java 源文件中的文檔注釋 (/** ... */) 和 Java 文檔的內(nèi)容,你會發(fā)現(xiàn)它們就是一樣的。Java 文檔只是還在格式和排版上下了些功夫。再仔細(xì)一點,你會發(fā)現(xiàn) .java 源文件中的注釋還帶有 HTML 標(biāo)識,如 <B>、<BR>、<Code> 等,在 Java 文檔中,該出現(xiàn)這些標(biāo)識的地方,已經(jīng)按標(biāo)識的的定義進(jìn)行了排版。

      終于真像大白了,原來 Java 文檔是來自這些注釋。難怪這些注釋叫做文檔注釋呢!不過,是什么工具把這些注釋變成文檔的呢?

      是該請出 javadoc 的時候了。在 JDK 的 bin 目錄下你可以找到 javadoc,如果是 Windows 下的 JDK,它的文件名為 javadoc.exe。使用 javdoc 編譯 .java 源文件時,它會讀出 .java 源文件中的文檔注釋,并按照一定的規(guī)則與 Java 源程序一起進(jìn)行編譯,生成文檔。

      介紹 javadoc 的編譯命令之前,還是先了解一下文檔注釋的格式吧。不過為了能夠編譯下面提到的若干例子,這里先介紹一條 javadoc 命令:

      javadoc -d 文檔存放目錄 -author -version 源文件名.java

      這條命令編譯一個名為 “源文件名.java”的 java 源文件,并將生成的文檔存放在“文檔存放目錄”指定的目錄下,生成的文檔中 index.html 就是文檔的首頁。-author 和 -version 兩個選項可以省略。


    二. 文檔注釋的格式

      文檔注釋可以用于對類、屬性、方法等進(jìn)行說明。寫文檔注釋時除了需要使用 /** .... */ 限定之外,還需要注意注釋內(nèi)部的一些細(xì)節(jié)問題。

      1. 文檔和文檔注釋的格式化

      生成的文檔是 HTML 格式,而這些 HTML 格式的標(biāo)識符并不是 javadoc 加的,而是我們在寫注釋的時候?qū)懮先サ摹1热纾枰獡Q行時,不是敲入一個回車符,而是寫入 <br>,如果要分段,就應(yīng)該在段前寫入 <p>。

      因此,格式化文檔,就是在文檔注釋中添加相應(yīng)的 HTML 標(biāo)識。

      文檔注釋的正文并不是直接復(fù)制到輸出文件 (文檔的 HTML 文件),而是讀取每一行后,刪掉前導(dǎo)的 * 號及 * 號以前的空格,再輸入到文檔的。如

      /**
    * This is first line. <br>
    ***** This is second line. <br>
    This is third line.
    */

      編譯輸出后的 HTML 源碼則是

      This is first line. <br>
    This is second line. <br>
    This is third line.

      前導(dǎo)的 * 號允許連續(xù)使用多個,其效果和使用一個 * 號一樣,但多個 * 號前不能有其它字符分隔,否則分隔符及后面的 * 號都將作為文檔的內(nèi)容。* 號在這里是作為左邊界使用,如上例的第一行和第二行;如果沒有前導(dǎo)的 * 號,則邊界從第一個有效字符開始,而不包括前面的空格,如上例第三行。

      還有一點需要說明,文檔注釋只說明緊接其后的類、屬性或者方法。如下例:

     
    /** comment for class */
    public class Test {
    
        /** comment for a attribute */
        int number;
    
        /** comment for a method */
        public void myMethod() { ...... }
    
        ......
    }

      上例中的三處注釋就是分別對類、屬性和方法的文檔注釋。它們生成的文檔分別是說明緊接其后的類、屬性、方法的。“緊接”二字尤其重要,如果忽略了這一點,就很可能造成生成的文檔錯誤。如

     
    import java.lang.*;
    
    /** commnet for class */
    
    public class Test { ...... }
    
    // 此例為正確的例子

      這個文檔注釋將生成正確的文檔。但只需要改變其中兩行的位置,變成下例,就會出錯:

     
    /** commnet for class */
    
    import java.lang.*;
    
    public class Test { ...... }
    
    // 此例為錯誤的例子

      這個例子只把上例的 import 語句和文檔注釋部分交換了位置,結(jié)果卻大不相同——生成的文檔中根本就找不到上述注釋的內(nèi)容了。原因何在?

      “/** commnet for class */”是對 class Test 的說明,把它放在“public class Test { ...... }”之前時,其后緊接著 class Test,符合規(guī)則,所以生成的文檔正確。但是把它和“import java.lang.*;”調(diào)換了位置后,其后緊接的就是不 class Test 了,而是一個 import 語句。由于文檔注釋只能說明類、屬性和方法,import 語句不在此列,所以這個文檔注釋就被當(dāng)作錯誤說明省略掉了。

      2. 文檔注釋的三部分

      根據(jù)在文檔中顯示的效果,文檔注釋分為三部分。先舉例如下,以便說明。

     
    /**
     * show 方法的簡述.
     * <p>show 方法的詳細(xì)說明第一行<br>
     * show 方法的詳細(xì)說明第二行
     * @param b true 表示顯示,false 表示隱藏
     * @return 沒有返回值
     */
    public void show(boolean b) {
        frame.show(b);
    }

      第一部分是簡述。文檔中,對于屬性和方法都是先有一個列表,然后才在后面一個一個的詳細(xì)的說明。列表中屬性名或者方法名后面那段說明就是簡述。如下圖中被紅框框選的部分:

    001.gif

      簡述部分寫在一段文檔注釋的最前面,第一個點號 (.) 之前 (包括點號)。換句話說,就是用第一個點號分隔文檔注釋,之前是簡述,之后是第二部分和第三部分。如上例中的 “* show 方法的簡述.”。

      有時,即使正確地以一個點號作為分隔,javadoc 仍然會出錯,把點號后面的部分也做為了第一部分。為了解決這個問題,我們可以使用一個 <p> 標(biāo)志將第二分部分開為下一段,如上例的“* <p>show 方法的詳細(xì)說明第一行 ....”。除此之外,我們也可以使用 <br> 來分隔。

      第二部分是詳細(xì)說明部分。該部分對屬性或者方法進(jìn)行詳細(xì)的說明,在格式上沒有什么特殊的要求,可以包含若干個點號。它在文檔中的位置如下圖所示:

    002.gif 

      這部分文檔在上例中相應(yīng)的代碼是:

      * show 方法的簡述.
      * <p>show 方法的詳細(xì)說明第一行<br>
      * show 方法的詳細(xì)說明第二行

      發(fā)現(xiàn)什么了?對了,簡述也在其中。這一點要記住了,不要畫蛇添足——在詳細(xì)說明部分中再寫一次簡述哦!

      第三部分是特殊說明部分。這部分包括版本說明、參數(shù)說明、返回值說明等。它在文檔中的位置:

    003.gif

      第三部分在上例中相應(yīng)的代碼是

      * @param b true 表示顯示,false 表示隱藏
      * @return 沒有返回值

      除了 @param 和 @return 之外,還有其它的一些特殊標(biāo)記,分別用于對類、屬性和方法的說明……不要推我,我馬上就說。


    三. 使用 javadoc 標(biāo)記

      javadoc 標(biāo)記是插入文檔注釋中的特殊標(biāo)記,它們用于標(biāo)識代碼中的特殊引用。javadoc 標(biāo)記由“@”及其后所跟的標(biāo)記類型和專用注釋引用組成。記住了,三個部分——@、標(biāo)記類型、專用注釋引用。不過我寧愿把它分成兩部分:@ 和標(biāo)記類型、專用注釋引用。雖然 @ 和 標(biāo)記類型之間有時可以用空格符分隔,但是我寧愿始終將它們緊挨著寫,以減少出錯機(jī)會。

      javadoc 標(biāo)記有如下一些:

    標(biāo)記 用于 作用
    @author 對類的說明 標(biāo)明開發(fā)該類模塊的作者
    @version 對類的說明 標(biāo)明該類模塊的版本
    @see 對類、屬性、方法的說明 參考轉(zhuǎn)向,也就是相關(guān)主題
    @param 對方法的說明 對方法中某參數(shù)的說明
    @return 對方法的說明 對方法返回值的說明
    @exception 對方法的說明 對方法可能拋出的異常進(jìn)行說明

      下面詳細(xì)說明各標(biāo)記。

      1. @see 的使用

      @see 的句法有三種:

      @see 類名
      @see #方法名或?qū)傩悦?BR>  @see 類名#方法名或?qū)傩悦?/FONT>

      類名,可以根據(jù)需要只寫出類名 (如 String) 或者寫出類全名 (如 java.lang.String)。那么什么時候只需要寫出類名,什么時候需要寫出類全名呢?

      如果 java 源文件中的 import 語句包含了的類,可以只寫出類名,如果沒有包含,則需要寫出類全名。java.lang 也已經(jīng)默認(rèn)被包含了。這和 javac 編譯 java 源文件時的規(guī)定一樣,所以可以簡單的用 javac 編譯來判斷,源程序中 javac 能找到的類,javadoc 也一定能找到;javac 找不到的類,javadoc 也找不到,這就需要使用類全名了。

      方法名或者屬性名,如果是屬性名,則只需要寫出屬性名即可;如果是方法名,則需要寫出方法名以及參數(shù)類型,沒有參數(shù)的方法,需要寫出一對括號。如

    成員類型 成員名稱及參數(shù) @see 句法
    屬性 number @see number
    屬性 count @see count
    方法 count() @see count()
    方法 show(boolean b) @see show(boolean)
    方法 main(String[] args) @see main(String[])

      有時也可以偷懶:假如上例中,沒有 count 這一屬性,那么參考方法 count() 就可以簡寫成 @see count。不過,為了安全起見,還是寫全 @see count() 比較好。

      @see 的第二個句法和第三個句法都是轉(zhuǎn)向方法或者屬性的參考,它們有什么區(qū)別呢?

      第二個句法中沒有指出類名,則默認(rèn)為當(dāng)前類。所以它定義的參考,都轉(zhuǎn)向本類中的屬性或者方法。而第三個句法中指出了類名,則還可以轉(zhuǎn)向其它類的屬性或者方法。

      關(guān)于 @see 標(biāo)記,我們舉個例說明。由于 @see 在對類說明、對屬性說明、對方法說明時用法都一樣,所以這里只以對類說明為例。

     
    /**
     * @see String
     * @see java.lang.StringBuffer
     * @see #str
     * @see #str()
     * @see #main(String[])
     * @see Object#toString()
     */
    public class TestJavaDoc {
    
    }

      生成的文檔的相關(guān)部分如下圖:

    004.gif

      String 和 StringBuffer 都是在 java.lang 包中,由于這個包是默認(rèn)導(dǎo)入了的,所以這兩個類可以直接寫類名,也可以寫類全名。str、str() 為同名屬性和方法,所以方法名需要用 () 區(qū)分。main 是帶參數(shù)的方法,所以在 () 中指明了參數(shù)類型。toString() 雖然在本類中也有 (從 Object 繼承的),但我們是想?yún)⒖?Object 類的 toString() 方法,所以使用了 Object#toString()。

      奇怪的是,為什么其中只有 str、str() 和 main(String[]) 變成了鏈接呢?那是因為編譯時沒有把 java.lang 包或者 Stirng、StringBuffer、Object 三個類的源文件一起加入編譯,所以,生成的文檔沒有關(guān)于那三個類的信息,也就不可以建立鏈接了。后面講解 javadoc 編譯命令的時候還會詳細(xì)說明。

      上例中如果去把類中的 str 屬性去掉,那么生成的文檔又會有什么變化呢?你會發(fā)現(xiàn),原來是 str, str(),而現(xiàn)在變成了 str(), str(),因為 str 屬性已經(jīng)沒有了,所以 str 也表示方法 str()。

      2. 使用 @author、@version 說明類

      這兩個標(biāo)記分別用于指明類的作者和版本。缺省情況下 javadoc 將其忽略,但命令行開關(guān) -author 和 -version 可以修改這個功能,使其包含的信息被輸出。這兩個標(biāo)記的句法如下:

      @author 作者名
      @version 版本號

      其中,@author 可以多次使用,以指明多個作者,生成的文檔中每個作者之間使用逗號 (,) 隔開。@version 也可以使用多次,只有第一次有效,生成的文檔中只會顯示第一次使用 @version 指明的版本號。如下例

     
    /**
     * @author Fancy
     * @author Bird
     * @version Version 1.00
     * @version Version 2.00
     */
    public class TestJavaDoc {
    
    }

      生成文檔的相關(guān)部分如圖:

    005.gif

      從生成文檔的圖示中可以看出,兩個 @author 語句都被編譯,在文檔中生成了作者列表。而兩個 @version 語句中只有第一句被編譯了,只生成了一個版本號。

      從圖上看,作者列表是以逗號分隔的,如果我想分行顯示怎么辦?另外,如果我想顯示兩個以上的版本號又該怎么辦?

      ——我們可以將上述兩條 @author 語句合為一句,把兩個 @version 語句也合為一句:

      @author Fancy<br>Bird
      @version Version 1.00<br>Version 2.00

      結(jié)果如圖:

      我們這樣做即達(dá)到了目的,又沒有破壞規(guī)則。@author 之后的作者名和 @version 之后的版本號都可以是用戶自己定義的任何 HTML 格式,所以我們可以使用 <br> 標(biāo)記將其分行顯示。同時,在一個 @version 中指明兩個用 <br> 分隔的版本號,也沒有破壞只顯示第一個 @version 內(nèi)容的規(guī)則。

      3. 使用 @param、@return 和 @exception 說明方法

      這三個標(biāo)記都是只用于方法的。@param 描述方法的參數(shù),@return 描述方法的返回值,@exception 描述方法可能拋出的異常。它們的句法如下:

      @param 參數(shù)名 參數(shù)說明
      @return 返回值說明
      @exception 異常類名 說明

      每一個 @param 只能描述方法的一個參數(shù),所以,如果方法需要多個參數(shù),就需要多次使用 @param 來描述。

      一個方法中只能用一個 @return,如果文檔說明中列了多個 @return,則 javadoc 編譯時會發(fā)出警告,且只有第一個 @return 在生成的文檔中有效。

      方法可能拋出的異常應(yīng)當(dāng)用 @exception 描述。由于一個方法可能拋出多個異常,所以可以有多個 @exception。每個 @exception 后面應(yīng)有簡述的異常類名,說明中應(yīng)指出拋出異常的原因。需要注意的是,異常類名應(yīng)該根據(jù)源文件的 import 語句確定是寫出類名還是類全名。   示例如下:

     
    public class TestJavaDoc {
    
        /**
         * @param n a switch
         * @param b excrescent parameter
         * @return true or false
         * @return excrescent return
         * @exception java.lang.Exception throw when switch is 1
         * @exception NullPointerException throw when parameter n is null
         */
        public boolean fun(Integer n) throws Exception {
            switch (n.intValue()) {
            case 0:
                break;
            case 1:
                throw new Exception("Test Only");
            default:
                return false;
            }
            return true;
        }
    
    }

      使用 javadoc 編譯生成的文檔相關(guān)部分如下圖:

      可以看到,上例中 @param b excrescent parameter 一句是多余的,因為參數(shù)只是一個 n,并沒有一個 b但是 javadoc 編譯時并沒有檢查。因此,寫文檔注釋時一定要正確匹配參數(shù)表與方法中正式參數(shù)表的項目。如果方法參數(shù)表中的參數(shù)是 a,文檔中卻給出對參數(shù) x 的解釋,或者再多出一個參數(shù) i,就會讓人摸不著頭腦了。@exceptin 也是一樣。

      上例程序中并沒有拋出一個 NullPointerException,但是文檔注釋中為什么要寫上這么一句呢,難道又是為了演示?這不是為了演示描述多余的異常也能通過編譯,而是為了說明寫異常說明時應(yīng)考運行時 (RunTime) 異常的可能性。上例程序中,如果參數(shù) n 是給的一個空值 (null),那么程序會在運行的時候拋出一個 NullPointerException,因此,在文檔注釋中添加了對 NullPointerException 的說明。

      上例中的 @return 語句有兩個,但是根據(jù)規(guī)則,同一個方法中,只有第一個 @return 有效,其余的會被 javadoc 忽略。所以生成的文檔中沒有出現(xiàn)第二個 @return 的描述。

      講到這里,該怎么寫文檔注釋你應(yīng)該已經(jīng)清楚了,下面就開始講解 javadoc 的常用命令。


    四. javadoc 命令

      運行 javadoc -help 可以看到 javadoc 的用法,這里列舉常用參數(shù)如下:

    用法:
      javadoc [options] [packagenames] [sourcefiles]

    選項:

      -public 僅顯示 public 類和成員
      -protected 顯示 protected/public 類和成員 (缺省)
      -package 顯示 package/protected/public 類和成員
      -private 顯示所有類和成員
      -d <directory> 輸出文件的目標(biāo)目錄
      -version 包含 @version 段
      -author 包含 @author 段
      -splitindex 將索引分為每個字母對應(yīng)一個文件
      -windowtitle <text> 文檔的瀏覽器窗口標(biāo)題

      javadoc 編譯文檔時可以給定包列表,也可以給出源程序文件列表。例如在 CLASSPATH 下有兩個包若干類如下:

      fancy.Editor
      fancy.Test
      fancy.editor.ECommand
      fancy.editor.EDocument
      fancy.editor.EView

      這里有兩個包 (fancy 和 fancy.editor) 和 5 個類。那么編譯時 (Windows 環(huán)境) 可以使用如下 javadoc 命令:

      javadoc fancy\Test.java fancy\Editor.java fancy\editor\ECommand.java fancy\editor\EDocument.java fancy\editor\EView.java

      這是給出 java 源文件作為編譯參數(shù)的方法,注意命令中指出的是文件路徑,應(yīng)該根據(jù)實際情況改變。也可以是給出包名作為編譯參數(shù),如:

      javadoc fancy fancy.editor

      用瀏覽器打開生成文檔的 index.html 文件即可發(fā)現(xiàn)兩種方式編譯結(jié)果的不同,如下圖:

      用第二條命令生成的文檔被框架分成了三部分:包列表、類列表和類說明。在包列表中選擇了某個包之后,類列表中就會列出該包中的所有類;在類列表中選擇了某個類之后,類說明部分就會顯示出該類的詳細(xì)文檔。而用第一條命令生成的文檔只有兩部分,類列表和類說明,沒有包列表。這就是兩種方式生成文檔的最大區(qū)別了。

      下面再來細(xì)說選項。

      -public、-protected、-package、-private 四個選項,只需要任選其一即可。它們指定的顯示類成員的程度。它們顯示的成員多少是一個包含的關(guān)系,如下表:

    -private (顯示所有類和成員)
    -package (顯示 package/protected/public 類和成員)
    -protected (顯示 protected/public 類和成員)
    -public (僅顯示 public 類和成員)

      -d 選項允許你定義輸出目錄。如果不用 -d 定義輸出目錄,生成的文檔文件會放在當(dāng)前目錄下。-d 選項的用法是

      -d 目錄名

      目錄名為必填項,也就是說,如果你使用了 -d 參數(shù),就一定要為它指定一個目錄。這個目錄必須已經(jīng)存在了,如果還不存在,請在運行 javadoc 之前創(chuàng)建該目錄。

      -version 和 -author 用于控制生成文檔時是否生成 @version 和 @author 指定的內(nèi)容。不加這兩個參數(shù)的情況下,生成的文檔中不包含版本和作者信息。

      -splitindex 選項將索引分為每個字母對應(yīng)一個文件。默認(rèn)情況下,索引文件只有一個,且該文件中包含所有索引內(nèi)容。當(dāng)然生成文檔內(nèi)容不多的時候,這樣做非常合適,但是,如果文檔內(nèi)容非常多的時候,這個索引文件將包含非常多的內(nèi)容,顯得過于龐大。使用 -splitindex 會把索引文件按各索引項的第一個字母進(jìn)行分類,每個字母對應(yīng)一個文件。這樣,就減輕了一個索引文件的負(fù)擔(dān)。

      -windowtitle 選項為文檔指定一個標(biāo)題,該標(biāo)題會顯示在窗口的標(biāo)題欄上。如果不指定該標(biāo)題,而默認(rèn)的文檔標(biāo)題為“生成的文檔(無標(biāo)題)”。該選項的用法是:

      -windowtitle 標(biāo)題

      標(biāo)題是一串沒有包含空格的文本,因為空格符是用于分隔各參數(shù)的,所以不能包含空格。同 -d 類似,如果指定了 -windowtitle 選項,則必須指定標(biāo)題文本。

      到此為止,Java 文檔和 javadoc 就介紹完了。javadoc 真的能讓我們在 Java 注釋上做文章——生成開發(fā)文檔。

    posted @ 2006-02-20 15:41 qiyadeng 閱讀(1417) | 評論 (1)編輯 收藏

    ISBN號是國際標(biāo)準(zhǔn)書號的簡稱,它是國際標(biāo)準(zhǔn)化組織于1972年公布的一項國際通用的出版物統(tǒng)一編號方法。所有正規(guī)出版的普通圖書版權(quán)頁都有ISBN 號,ISBN是 international standard of book number 幾個英文字母的縮寫,即國際標(biāo)準(zhǔn)書號。它由10位數(shù)字組成,這10位數(shù)字由組號、出版者號、書名號、校驗號這四部分組成,其間用“--”相連。

      ISBN號是由10位數(shù)字組成,共分四段:

    1.組號: 代表出版者的國家,地理區(qū)域,語種等.我國的組號為"7"。

    2.出版者號: 代表組內(nèi)所屬的一個具體出版者(出版社,出版公司等)。由國家或地區(qū)的ISBN中心設(shè)置和分配,可取1-7位數(shù)字。

    3.書名號:書名號是由出版者給予每種出版物的編號。

    4. 校驗號: 校驗號是ISBN號的最后一位數(shù)值,它能夠校驗出ISBN號是否正確,即:將ISBN1-9位數(shù)字順序乘以10-2這9個數(shù)字,將這些乘積之和再加上校驗 號,假如能被11整除,則這個ISBN號是正確的,算式為7*10+3*9+0*8 +5*7+0*6+1*5+5*4+6*3+8*2+7= 198,198/11=18,能被11整除。校驗號只能是1位數(shù),當(dāng)為10時,記為羅馬數(shù)字X。

    posted @ 2006-02-17 10:18 qiyadeng 閱讀(437) | 評論 (0)編輯 收藏

     該文章在<<EJB編程指南>>的實例的基礎(chǔ)上建立的,主要是給新手一個比較直觀的例子和作為自己的日志,并不打算介紹EJB的原理性的東西。另外,由于本人水平有限,請不吝賜教。
        筆者使用的IDE為:Eclipse3.0+MyEclipse4.01GA
        J2EE容器為:JBoss4.0
       
        本文描述一個幫助存款和取款的無狀態(tài)會話Bean的完整開發(fā)及部署的過程。步驟如下:
    1、編寫無狀態(tài)會話Bean的實現(xiàn)類。
    2、編寫無狀態(tài)會話Bean的主接口和組件接口。
    3、將Bean匯編成應(yīng)用程序,編寫部署描述項。
    4、在EJB服務(wù)器上部署應(yīng)用程序。
    5、用Java應(yīng)用程序進(jìn)行測試。
    上面是主要的過程,有些步驟可以不用手工完成,通過IDE可以簡化開發(fā)過程,如果你對IDE的該功能不太清楚可以參考產(chǎn)品文檔(http: //myeclipseide.com/enterpriseworkbench/help/index.jsp?topic=/com.genuitec.myeclipse.doc/html/quickstarts/firstejb/index.html)。

    一、新建一個EJB Project,工程名字為FundEJB,其他默認(rèn)就好。
    二、創(chuàng)建Session Bean:
        1、在src目錄下新建包:qiya.deng.fund.ejb,請注意包名最后一定要以ejb為后綴,因為后面我們需要使用的XDoclet工具。
        2、新建SessionBean class,命名為StatelessFundManagerEJB,要需要以EJB為后綴,原因同上,而且根據(jù)規(guī)范最好是以EJB或是Bean為后綴。
       

        3、配置XDoclet :
        右擊項目選擇Properties,選擇MyEclipse-XDoclet,點擊Add Stander...,選擇Standard EJB。
       
        選中Standard EJB,在ejbxdoclet上點擊右鍵添加Add,在其中選擇jboss,因為該例子中使用jboss作為應(yīng)用服務(wù)器。選中jboss,修改下列屬性
        Version = 4.0
        destDir = src/META-INF
       修改完畢,點擊OK按鈕回到主窗口。

        4、運行Xdoclet:
        右擊項目選擇MyEclipse->run Xdoclet。運行是console窗口會產(chǎn)生提示信息,運行完畢可以看到目錄結(jié)構(gòu)發(fā)生變化。
       
        5、編輯實現(xiàn)類StatelessFundManagerEJB:
        在編輯StatelessFundManagerEJB類之前選觀察下StatelessFundManager接口,一定可以發(fā)現(xiàn)這個遠(yuǎn)程組件接口的接口方法和StatelessFundManager的方法是有對應(yīng)關(guān)系的。
        在StatelessFundManager.java文件最后添加:

            /**
         *
         * @param balance
         * @param amount
         * @return
         *
         * @ejb.interface-method
         */
        public double addFunds(double balance,double amount){
            balance += amount;
            return balance;
        }
       
        /**
         *
         * @param balance
         * @param amount
         * @return
         * @throws InsufficientBalanceException
         *
         * @ejb.interface-method
         */
        public double withdrawFunds(double balance,double amount)throws InsufficientBalanceException {
            if (balance < amount) {
                throw (new InsufficientBalanceException());
            }
            balance -= amount;
            return balance;
        }
        重復(fù)第4步運行Xdoclet,之后觀察StatelessFundManager接口。

       6、部署該應(yīng)用到EJB服務(wù)器:
        部署描述項在IDE自動生成了,該文件的位置在/META-INF/ejb-jar.xml。打開ejb-jar.xml,jboss.xml文件描述進(jìn)行查看。
        利用MyEclipse提供的部署工具進(jìn)行部署:
       
        然后運行JBoss容器,可以看到有如下信息提示:

       

        關(guān)于MyEclipse中Application Server的使用請查看文檔(http://www.myeclipseide.com/images/tutorials/quickstarts/appservers/)。
        到現(xiàn)在為止,你已經(jīng)發(fā)布了一個簡單的無狀態(tài)的會話Bean。下面寫個簡單的應(yīng)用程序進(jìn)行測試.
       
    三、編寫進(jìn)行測試的Java客戶端程序。
        客戶端程序可以是Web程序也可以是Application應(yīng)用程序。這里以Application應(yīng)用程序為例。
        同樣使用Eclipse,新建Java Project,這里命名為FundClient。右擊該項目選擇properties->Java Build path,在Projects中加入上面的Project:FundEJB。在Libraries中點擊Add External JARs...,把$JBoss_Home/client的目錄下的所有jar文件添加到Libraries中。
        最后,就是編寫客戶端代碼:

    package qiya.deng.client;
        //import省去
    public class StatelessFundManagerTestClient extends JFrame implements
            ActionListener {

        double balance = 0;
        JTextField amount = new JTextField(10);
        JButton addFunds = new JButton("Add Funds");
        JButton withdrawFunds = new JButton("Withdraw Funds");
        String msg = "Current account balance";
        String strBal = "0";
        JLabel status;
        StatelessFundManager manager;
        NumberFormat currencyFormatter;
       
        public StatelessFundManagerTestClient(){
            super("Fund Manager");
        }
       
        public static void main(String[] args){
            new StatelessFundManagerTestClient().init();
        }
       
        private void init() {
           
            buildGUI();
           
            addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent event){
                    System.exit(0);
                }
            });
           
            addFunds.addActionListener(this);
            withdrawFunds.addActionListener(this);
           
            createFundManager();
           
            currencyFormatter = NumberFormat.getCurrencyInstance();
            String currencyOut = currencyFormatter.format(0);
            status.setText(msg + currencyOut);
           
            pack();
            show();
        }

        private void buildGUI() {
            GridBagLayout gl = new GridBagLayout();
            GridBagConstraints gc = new GridBagConstraints();
            Container container = getContentPane();
            container.setLayout(gl);
           
            gc.fill = GridBagConstraints.BOTH;
            JLabel label = new JLabel("Enter Amount");
            gl.setConstraints(label,gc);
            container.add(label);
           
            gc.gridwidth = GridBagConstraints.REMAINDER;
            gl.setConstraints(amount,gc);
            container.add(amount);
           
            gl.setConstraints(addFunds,gc);
            container.add(addFunds);
            gl.setConstraints(withdrawFunds,gc);
            container.add(withdrawFunds);
           
            status = new JLabel(msg);
            gl.setConstraints(status,gc);
            container.add(status);
        }

        public void createFundManager(){
            try {
                Properties prop = new Properties();
                prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
                prop.put(Context.PROVIDER_URL,"localhost:1099");
                Context initial = new InitialContext(prop);
                Object objref = initial.lookup("ejb/StatelessFundManager");//JINI-Name
                StatelessFundManagerHome home =
                    (StatelessFundManagerHome) PortableRemoteObject.narrow(objref,StatelessFundManagerHome.class);
                manager = home.create();
            } catch (ClassCastException e) {
                e.printStackTrace();
            } catch (RemoteException e) {
                e.printStackTrace();
            } catch (NamingException e) {
                e.printStackTrace();
            } catch (CreateException e) {
                e.printStackTrace();
            }
        }

        public void actionPerformed(ActionEvent e) {
           
           
           
            if (e.getActionCommand().equalsIgnoreCase("Withdraw Funds")) {
                System.out.println("Withdraw Funds");
            }
            if (e.getActionCommand().equalsIgnoreCase("Add Funds")) {
                System.out.println("Add Funds");
            }
           
            if (e.getSource().equals(addFunds)){
                System.out.println("addFunds");
                try {
                    status.setText(msg + currencyFormatter.format(manager.addFunds(0,Double.parseDouble(amount.getText()))));
                } catch (NumberFormatException e1) {
                    e1.printStackTrace();
                } catch (RemoteException e1) {
                    e1.printStackTrace();
                }
            }
            if (e.getSource().equals(withdrawFunds)){
                System.out.println("withdrawFund");
                try {
                    status.setText(msg + currencyFormatter.format(manager.withdrawFunds(100,Double.parseDouble(amount.getText()))));
                } catch (NumberFormatException e1) {
                    e1.printStackTrace();
                } catch (RemoteException e1) {
                    e1.printStackTrace();
                } catch (InsufficientBalanceException e1) {
                    e1.printStackTrace();
                }
            }
        }

    }
        然后,你可以運行該程序進(jìn)行測試了:
         
        至此,恭喜你,你已經(jīng)大功告成,基本上對EJB建立了感性的認(rèn)識,可以參考資料進(jìn)行深入的學(xué)習(xí)了。

    posted @ 2006-02-04 20:17 qiyadeng 閱讀(743) | 評論 (0)編輯 收藏

       今天是大年的初一,新年的第一天!!!祝所有的朋友春節(jié)快樂,狗年旺旺(好像關(guān)于狗年的賀詞不多)!也希望自己新的一年來進(jìn)步多多,有所作為。

    posted @ 2006-01-29 22:50 qiyadeng 閱讀(274) | 評論 (0)編輯 收藏

    因為需要對網(wǎng)絡(luò)環(huán)境進(jìn)行監(jiān)控,做了個Java程序在linux服務(wù)器上運行。但是每次重新啟動的時候都要手動的運行,這樣就不太現(xiàn)實。所以想到把Java程序做成像Windows的系統(tǒng)服務(wù)那樣,開機(jī)就會自動在后臺運行。以前使用過一個工具http://javaservice.objectweb.org/,可以把Java程序注冊成為Windows的系統(tǒng)服務(wù),而且使用起來很簡單,但是遺憾的是該工具不能注冊linux的后臺服務(wù)。所以不得不另外尋找工具。

     

       最后找到了JavaService Wrapper(http://wrapper.tanukisoftware.org/doc/english/introduction.html),該工具能在很多中平臺下面注冊為系統(tǒng)服務(wù)(查看支持平臺)。該工具使用方法有三種模式,我用的是第一種WrapperSimpleApp幫助類,另外的兩種方式都需要在原來的程序上進(jìn)行適當(dāng)?shù)木幋a。下面就用我的程序NetWatchDog為例子說明下大概的配置步驟。(其實文檔中已經(jīng)用Jboss進(jìn)行了演示)

     

    1.建立一個目錄名為NetWatchDog,并在該目錄下建立bin,lib,conf,logs目錄。以下把NetWatchDog目錄稱為$DOG_HOME。

    2.把下載來的文件解壓,把$WRAPPER_HOME/bin/wrapper,$WRAPPER_HOME/src/bin/sh.script.in文件copy到$DOG_HOME/bin目錄中。

    3.把sh.script.in文件該名為你的服務(wù)名稱,這里改為NetWatchDog。

    4.編輯NetWatchDog,把Application的相關(guān)信息改為如下:

    APP_NAME="NetWatchDog"
    APP_LONG_NAME="NetWatchDog Application"

    5.把你的程序的打包成jar文件,拷貝到$DOG_HOME/lib目錄下,并把$WRAPPER_HOME/lib/libwrapper.so,$WRAPPER_HOME/lib/wrapper.jar文件也拷貝到$DOG_HOME/lib目錄下面。

    6.這步比較重要是成敗的關(guān)鍵,把$WRAPPER_HOME/conf/wrapper.conf文件拷貝到$DOG_HOME/conf目錄下(文檔上面說的是wrapper.conf.in文件,但是我下載來的文件就是wrapper.conf,所以步需要改名的)。

    7.編輯wrapper.conf文件:

    #java命令的位置

    wrapper.java.command=%JAVA_HOME%/bin/java

    #wrapper的主類

    wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

    #java classpath

    wrapper.java.classpath.1=../lib/wrapper.jar
    wrapper.java.classpath.2=%JAVA_HOME%/jre/lib/ext/log4j-1.2.13.jar
    wrapper.java.classpath.3=%JAVA_HOME%/jre/lib/ext/activation.jar
    wrapper.java.classpath.4=%JAVA_HOME%/jre/lib/ext/commons-email-1.0.jar
    wrapper.java.classpath.5=%JAVA_HOME%/jre/lib/ext/mail.jar
    wrapper.java.classpath.6=../lib/NetWatchDog.jar
    #你的程序的主類,將作為wrapper的參數(shù)

    wrapper.app.parameter.1=qiya.deng.main.Main

    8.這樣基本就大功告成了,現(xiàn)在可以運行命令./NetWatchDog  start,如果提示權(quán)限不夠就用chmod 755 NetWatchDog命令改變權(quán)限。如果沒出現(xiàn)錯誤提示,這樣基本上就正確了。
    另外Windwos版本可以參考:http://blog.chinaunix.com/u/1677/?u=http://blog.chinaunix.com/u/1677/showart.php?id=67084

    posted @ 2006-01-25 09:34 qiyadeng 閱讀(5973) | 評論 (3)編輯 收藏

    僅列出標(biāo)題
    共9頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 
    主站蜘蛛池模板: 亚洲日韩国产成网在线观看| 久久精品国产精品亚洲艾草网 | 国产免费观看视频| 免费无遮挡无码视频在线观看| 最新亚洲成av人免费看| 无码一区二区三区免费| 亚洲午夜无码久久久久小说| 亚洲国产成人久久一区WWW| 久久国产精品成人免费| 伊人久久亚洲综合影院首页| 亚洲精品无码专区久久同性男| 久久美女网站免费| 亚洲欧美中文日韩视频| 狠狠亚洲婷婷综合色香五月排名| 久久国产精品成人片免费| 亚洲欧美在线x视频| 亚洲天堂男人天堂| 免费在线观看理论片| 国产精品免费无遮挡无码永久视频| 亚洲人成在线播放| 在线亚洲午夜理论AV大片| 韩国免费一级成人毛片| 久久av免费天堂小草播放| 国产成人精品亚洲日本在线| 亚洲色偷偷狠狠综合网| 黄瓜视频高清在线看免费下载| 黄色短视频免费看| 亚洲精品无码成人| 亚洲视频小说图片| 亚洲免费日韩无码系列 | 色婷婷7777免费视频在线观看| 三级片免费观看久久| 中国china体内裑精亚洲日本| 久久青青草原亚洲av无码| 在线免费观看一级片| 99视频在线看观免费| 久久成人18免费网站| 亚洲AV无码成人精品区狼人影院| 亚洲国产精品一区二区久久| 亚洲精品人成无码中文毛片| 成年人网站在线免费观看|