ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          #

          下一個(gè)步驟是找出程序中對于舊函數(shù)的所有引用(reference)點(diǎn),并修改它們,讓它們改用新函數(shù). 下面是原本的程序:
          class Customer...
          public String statement() {
              double totalAmount = 0;
              int frequentRenterPoints = 0;
              Enumeration rentals = _rentals.elements();
              String result = "Rental Record for * " + getName() + "\n";
              while(rentals.hasMoreElements()) {
                 double thisAmount = 0;
                 Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

                 thisAmount = amountFor(each);

                 //   add frequent renter points(累加常客積點(diǎn))
                    frequentRenterPoints ++;
                    if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
                       each.getDaysRented() > 1)
                       frequentRenterPoints ++;

                    result += "\t" + each.getMovie().getTitle() + "\t" +
                       String.valueOf(thisAmount) + "\n";
                    totalAmount += thisAmount;
              }
          //   add footer lines(結(jié)尾打印)
              result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
              result += "You earned " + String.valueOf(frequentRenterPoints) +
                 "frequent renter points";
              return result;
          }

          本例之中,這個(gè)步驟很簡單,因?yàn)槲也艅倓偖a(chǎn)生新函數(shù),只有一個(gè)地方使用了它.一般情況下你得在可能運(yùn)用該函數(shù)的所有classes中查找一遍.
          class Customer
          public String statement() {
              double totalAmount = 0;
              int frequentRenterPoints = 0;
              Enumeration rentals = _rentals.elements();
              String result = "Rental Record for * " + getName() + "\n";
              while(rentals.hasMoreElements()) {
                 double thisAmount = 0;
                 Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

                 thisAmount = each.getCharge();

                 //   add frequent renter points(累加常客積點(diǎn))
                    frequentRenterPoints ++;
                    if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
                       each.getDaysRented() > 1)
                       frequentRenterPoints ++;

                    result += "\t" + each.getMovie().getTitle() + "\t" +
                       String.valueOf(thisAmount) + "\n";
                    totalAmount += thisAmount;
              }
          //   add footer lines(結(jié)尾打印)
              result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
              result += "You earned " + String.valueOf(frequentRenterPoints) +
                 "frequent renter points";
              return result;
          }
          posted @ 2005-08-15 13:00 ivaneeo 閱讀(205) | 評論 (0)編輯 收藏

          搬移[金額計(jì)算]代碼
          觀察amountFor()時(shí),我發(fā)現(xiàn)這個(gè)函數(shù)使用了來自Rental class的信息,卻沒有使用來自Customer class的信息.

          class Customer...
          public double amountFor(Rental aRental) {
              double result = 0;
              switch(aRental.getMovie().getPriceCode()) {   //取得影片出租價(jià)格
                    case Movie.REGULAR:   //普通片
                       result+= 2;
                       if(aRental.getDaysRented() > 2)
                          result+= (aRental.getDaysRented() - 2) * 1.5;
                       break;
                    case Movie.NEW_RELEASE:   //新片
                       result+= aRental.getDaysRented() * 3;
                       break;
                    case Movie.CHILDRENS:   //兒童片
                       result+= 1.5;
                       if(aRental.getDaysRented() > 3)
                          result+= (aRental.getDaysRented() - 3) * 1.5;
                       break;
                 }
              return result;
          }
          這立刻使我懷疑它是否被放錯(cuò)了位置.大多數(shù)情況下,函數(shù)應(yīng)該放在它使用的數(shù)據(jù)的所屬object(或說class)內(nèi),所以amountFor()應(yīng)該移 到Rental class去.為了這么做,我要運(yùn)用Move Method(142).首先把代碼拷貝到Rental class內(nèi),調(diào)整代碼使之適應(yīng)新家,然后重新編譯.下面這樣:

          class Rental...
          double getCharge() {
              double result = 0;
              switch(getMovie().getPriceCode()) {   //取得影片出租價(jià)格
                    case Movie.REGULAR:   //普通片
                       result+= 2;
                       if(getDaysRented() > 2)
                          result+= (getDaysRented() - 2) * 1.5;
                       break;
                    case Movie.NEW_RELEASE:   //新片
                       result+= getDaysRented() * 3;
                       break;
                    case Movie.CHILDRENS:   //兒童片
                       result+= 1.5;
                       if(getDaysRented() > 3)
                          result+= (getDaysRented() - 3) * 1.5;
                       break;
                 }
              return result;
          }
          這個(gè)例子里,[適應(yīng)新家]意味去掉參數(shù).此外,我還要在搬移的同時(shí)變更函數(shù)名稱.

          現(xiàn)在我可以測試新函數(shù)是否正常工作.只要改變Customer.amountFor()函數(shù)內(nèi)容,使它委托(delegate)新函數(shù)即可:

          class Customer...
              private double amountFor(Rental aRental) {
                 return aRental.getCharge();
              }
          posted @ 2005-08-15 11:03 ivaneeo 閱讀(190) | 評論 (0)編輯 收藏

          實(shí)例代碼:
          public String statement() {
              double totalAmount = 0;
              int frequentRenterPoints = 0;
              Enumeration rentals = _rentals.elements();
              String result = "Rental Record for * " + getName() + "\n";
              while(rentals.hasMoreElements()) {
                 double thisAmount = 0;
                 Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

                 switch(each.getMovie().getPriceCode()) {   //取得影片出租價(jià)格
                    case Movie.REGULAR:   //普通片
                       thisAmount += 2;
                       if(each.getDaysRented() > 2)
                          thisAmount += (each.getDaysRented() - 2) * 1.5;
                       break;
                    case Movie.NEW_RELEASE:   //新片
                       thisAmount += each.getDaysRented() * 3;
                       break;
                    case Movie.CHILDRENS:   //兒童片
                       thisAmount += 1.5;
                       if(each.getDaysRented() > 3)
                          thisAmount += (each.getDaysRented() - 3) * 1.5;
                       break;
                 }

                
          //   add frequent renter points(累加常客積點(diǎn))
                    frequentRenterPoints ++;
                    if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
                       each.getDaysRented() > 1)
                       frequentRenterPoints ++;

                    result += "\t" + each.getMovie().getTitle() + "\t" +
                       String.valueOf(thisAmount) + "\n";
                    totalAmount += thisAmount;
              }

              //   add footer lines(結(jié)尾打印)
              result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
              result += "You earned " + String.valueOf(frequentRenterPoints) +
                 "frequent renter points";
              return result;
          }

          第一步驟是找出代碼的邏輯泥團(tuán)并運(yùn)用Extract Method(110).本例一個(gè)明顯的邏輯泥團(tuán)就是switch語句,把它提煉(extract)到獨(dú)立函數(shù)中似乎比較好.

          首先我得在這段代碼里頭找出函數(shù)內(nèi)的局部變量(local variables)和參數(shù)(parameters).我找到了兩個(gè):each和thisAmount,前者并未被修改,后者會(huì)被修改.任何不會(huì)被修改的 變量都可以被我當(dāng)成參數(shù)傳入新的函數(shù),至于會(huì)被修改的變量就需格外小心.如果只有一個(gè)變量會(huì)被修改,我可以把它當(dāng)作返回值.thisAmount是個(gè)臨時(shí) 變量,其值在每次循環(huán)起始處被設(shè)為0,并且在switch語句之前不會(huì)改變,所以我可以把新函數(shù)的返回值賦予它.

          public String statement() {
              double totalAmount = 0;
              int frequentRenterPoints = 0;
              Enumeration rentals = _rentals.elements();
              String result = "Rental Record for * " + getName() + "\n";
              while(rentals.hasMoreElements()) {
                 double thisAmount = 0;
                 Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

                 thisAmount = amountFor(each);

                 //   add frequent renter points(累加常客積點(diǎn))
                    frequentRenterPoints ++;
                    if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
                       each.getDaysRented() > 1)
                       frequentRenterPoints ++;

                    result += "\t" + each.getMovie().getTitle() + "\t" +
                       String.valueOf(thisAmount) + "\n";
                    totalAmount += thisAmount;
              }
          //   add footer lines(結(jié)尾打印)
              result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
              result += "You earned " + String.valueOf(frequentRenterPoints) +
                 "frequent renter points";
              return result;
          }

          public double amountFor(Rental each) {
              double thisAmount = 0;
              switch(each.getMovie().getPriceCode()) {   //取得影片出租價(jià)格
                    case Movie.REGULAR:   //普通片
                       thisAmount += 2;
                       if(each.getDaysRented() > 2)
                          thisAmount += (each.getDaysRented() - 2) * 1.5;
                       break;
                    case Movie.NEW_RELEASE:   //新片
                       thisAmount += each.getDaysRented() * 3;
                       break;
                    case Movie.CHILDRENS:   //兒童片
                       thisAmount += 1.5;
                       if(each.getDaysRented() > 3)
                          thisAmount += (each.getDaysRented() - 3) * 1.5;
                       break;
                 }
              return thisAmount;
          }

          現(xiàn)在,已經(jīng)把原本的函數(shù)分為兩塊,可以分別處理它們.我不喜歡amountFor()內(nèi)的某些變量名稱,現(xiàn)在是修改它們的時(shí)候.
          下面是原本的代碼:
             public double amountFor(Rental each) {
              double thisAmount = 0;
              switch(each.getMovie().getPriceCode()) {   //取得影片出租價(jià)格
                    case Movie.REGULAR:   //普通片
                       thisAmount += 2;
                       if(each.getDaysRented() > 2)
                          thisAmount += (each.getDaysRented() - 2) * 1.5;
                       break;
                    case Movie.NEW_RELEASE:   //新片
                       thisAmount += each.getDaysRented() * 3;
                       break;
                    case Movie.CHILDRENS:   //兒童片
                       thisAmount += 1.5;
                       if(each.getDaysRented() > 3)
                          thisAmount += (each.getDaysRented() - 3) * 1.5;
                       break;
                 }
              return thisAmount;
          }

          下面是易名后的代碼:
          public double amountFor(Rental aRental) {
              double result = 0;
              switch(aRental.getMovie().getPriceCode()) {   //取得影片出租價(jià)格
                    case Movie.REGULAR:   //普通片
                       result += 2;
                       if(aRental.getDaysRented() > 2)
                          result += (aRental.getDaysRented() - 2) * 1.5;
                       break;
                    case Movie.NEW_RELEASE:   //新片
                       result += aRental.getDaysRented() * 3;
                       break;
                    case Movie.CHILDRENS:   //兒童片
                       result += 1.5;
                       if(aRental.getDaysRented() > 3)
                          result += (aRental.getDaysRented() - 3) * 1.5;
                       break;
                 }
              return result;
          }
          posted @ 2005-08-15 10:15 ivaneeo 閱讀(422) | 評論 (0)編輯 收藏

          1.邏輯泥團(tuán)(logical clump),這里是指類似下面的邏輯混在一起的代碼:
          ...
              switch(each.getMovie().getPriceCode()) {
                 case Movie.REGULAR:
                    thisAmount += 2;
                 .....
                 case Movie.CHILDRENDS:
                    thisAmount += 1.5;
                    if(each.getDaysRented() > 3)
                       thisAmount += (each.getDaysRented() - 3)*1.5;
                 break;
              }
          ...
          2.重構(gòu)名錄(refactoring catalog)是指常用的重構(gòu)方法列出的名錄.
          posted @ 2005-08-15 09:44 ivaneeo 閱讀(250) | 評論 (0)編輯 收藏

          快速而隨性地(quick and dirty)地設(shè)計(jì)一個(gè)簡單的程序并沒有錯(cuò).
          posted @ 2005-08-12 15:53 ivaneeo 閱讀(171) | 評論 (0)編輯 收藏

          1.首先,把windows的simsun.ttc文件考到指定目錄,重命名為simsun.ttf.


          2.注冊字體:到JAVA_HOME下的jre/lib/fonts下.編輯fonts.dir.具體如下:第一行的數(shù)字加一.在最后一行加入一句: simsun.ttf -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.
          可選字體的還有: simsun.ttf -SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
                                simsun.ttf -misc-SimSun-medium-r-normal--*-%d-*-*-c-*-iso10646-1


          3.修改JAVA_HOME下的jre/lib/的font.properties文件(這里的font.properties文件最好做備份).
          ($cp -v font.properties.zh_CN.Sun font.properties)

          修改的地方有三處:
          A.類似如下的 serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
          serif.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0
          看到xxxx.1=后面的字體全部改成已經(jīng)注冊的字體.

          B.類似如下的 fontset.serif.plain=\
          -b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0
          fontset.serif.plain=\后的第二行字體全部改成注冊的字體.

          C.最后一行:appendedfontpath=/usr/share/fonts/truetype.這里的/usr/share/fonts/truetype是simsun.ttf的考到的目錄名.

          具體文件如下:
          # @(#)font.properties.zh_CN.Sun.linux    1.1 03/07/14
          # Copyright 2003 Sun Microsystems, Inc. All rights reserved.
          #

          # Component Font Mappings For Linux zh_CN
          #
          serif.0=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
          serif.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          serif.italic.0=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1
          serif.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          serif.bold.0=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1
          serif.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          serif.bolditalic.0=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1
          serif.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          sansserif.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
          sansserif.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          sansserif.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
          sansserif.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          sansserif.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
          sansserif.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          sansserif.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
          sansserif.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          monospaced.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
          monospaced.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          monospaced.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
          monospaced.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          monospaced.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
          monospaced.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          monospaced.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
          monospaced.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          dialog.0=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
          dialog.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          dialog.italic.0=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
          dialog.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          dialog.bold.0=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
          dialog.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          dialog.bolditalic.0=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
          dialog.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          dialoginput.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
          dialoginput.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          dialoginput.italic.0=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
          dialoginput.italic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          dialoginput.bold.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
          dialoginput.bold.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          dialoginput.bolditalic.0=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
          dialoginput.bolditalic.1=-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          # Missing Glyph Character
          #
          default.char=274f

          # Component Font Character Encodings
          #
          fontcharset.serif.0=sun.io.CharToByteISO8859_1
          fontcharset.serif.1=sun.io.CharToByteGBK

          fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
          fontcharset.sansserif.1=sun.io.CharToByteGBK

          fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
          fontcharset.monospaced.1=sun.io.CharToByteGBK

          fontcharset.dialog.0=sun.io.CharToByteISO8859_1
          fontcharset.dialog.1=sun.io.CharToByteGBK

          fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
          fontcharset.dialoginput.1=sun.io.CharToByteGBK

          # Exclusion Ranges
          #

          # XFontSet Information
          #
          fontset.serif.plain=\
          -b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.serif.italic=\
          -b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.serif.bold=\
          -b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.serif.bolditalic=\
          -b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.sansserif.plain=\
          -b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.sansserif.italic=\
          -b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.sansserif.bold=\
          -b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.sansserif.bolditalic=\
          -b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.monospaced.plain=\
          -b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.monospaced.italic=\
          -b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.monospaced.bold=\
          -b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.monospaced.bolditalic=\
          -b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.dialog.italic=\
          -b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.dialog.bold=\
          -b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.dialog.bolditalic=\
          -b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.dialog.plain=\
          -b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.dialoginput.italic=\
          -b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.dialoginput.bold=\
          -b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.dialoginput.bolditalic=\
          -b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.dialoginput.plain=\
          -b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          fontset.default=\
          -b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1,\
          -default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.

          filename.-default-simsun-medium-r-normal--*-100-*-*-c-*-gb2312.1980-0.=/usr/share/fonts/truetype/simsun.ttf

          appendedfontpath=/usr/share/fonts/truetype



          posted @ 2005-08-11 13:38 ivaneeo 閱讀(729) | 評論 (0)編輯 收藏

          public class ReaderInputStream extends InputStream {
              protected Reader reader;
              protected ByteArrayOutputStream byteArrayOut;
              protected Writer writer;
              protected char[] chars;
              protected byte[] buffer;
              protected int index, length;

                /**
                 * 帶Reader參數(shù)構(gòu)造函數(shù)
                 *
                 * @param reader - InputStream使用的Reader
                 */
                public ReaderInputStream(Reader reader) {
                  this.reader = reader;
                  byteArrayOut = new ByteArrayOutputStream();
                  writer = new OutputStreamWriter(byteArrayOut);
                  chars = new char[1024];
                }

                /**
                 * 帶Reader和字符編碼格式參數(shù)的構(gòu)造函數(shù)
                 *
                 * @param reader   - InputStream使用的Reader
                 * @param encoding - InputStream使用的字符編碼格式.
                 * @throws 如果字符編碼格式不支持,則拋UnsupportedEncodingException異常
                 */
                public ReaderInputStream(Reader reader, String encoding)
                    throws UnsupportedEncodingException {
                  this.reader = reader;
                  byteArrayOut = new ByteArrayOutputStream();
                  writer = new OutputStreamWriter(byteArrayOut, encoding);
                  chars = new char[1024];
                }

                /**
                 * @see java.io.InputStream#read()
                 */
                public int read() throws IOException {
                  if (index >= length)
                    fillBuffer();
                  if (index >= length)
                    return -1;
                  return 0xff & buffer[index++];
                }

                protected void fillBuffer() throws IOException {
                  if (length < 0)
                    return;
                  int numChars = reader.read(chars);
                  if (numChars < 0) {
                    length = -1;
                  } else {
                    byteArrayOut.reset();
                    writer.write(chars, 0, numChars);
                    writer.flush();
                    buffer = byteArrayOut.toByteArray();
                    length = buffer.length;
                    index = 0;
                  }
                }

                /**
                 * @see java.io.InputStream#read(byte[], int, int)
                 */
                public int read(byte[] data, int off, int len) throws IOException {
                  if (index >= length)
                    fillBuffer();
                  if (index >= length)
                    return -1;
                  int amount = Math.min(len, length - index);
                  System.arraycopy(buffer, index, data, off, amount);
                  index += amount;
                  return amount;
                }

                /**
                 * @see java.io.InputStream#available()
                 */
                public int available() throws IOException {
                  return (index < length) ? length - index :
                      ((length >= 0) && reader.ready()) ? 1 : 0;
                }

                /**
                 * @see java.io.InputStream#close()
                 */
                public void close() throws IOException {
                  reader.close();
                }

          }
          posted @ 2005-08-11 09:27 ivaneeo 閱讀(2318) | 評論 (0)編輯 收藏

          1. 啟動(dòng)emacs.
          2.打開jde-mode方式.
          3.在打開jde-abbrev-mode方式.

          然后輸入if,接著按空格鍵(輸入if的條件);展開if語句.
          if(i == 0) {
          }  //  end of if (i == 0)

          表 1.  Abbreviations

          語句Abbreviation
          if-thenif
          elseelse
          if-then-elseife
          else-ifeif
          whilewhile
          forfor
          for (int I=0;I<UL;I++)fori
          for (Iterator i = c.iterator(); i.hasNext();)foriter
          main methodmain
          switchswitch
          casecase
          trytry
          catchcatch
          try finallytryf
          finallyfinally

          posted @ 2005-08-09 11:01 ivaneeo 閱讀(172) | 評論 (0)編輯 收藏

          首先,需打開jde模式.(M-x jde-mode)


          在JDEE里注冊一個(gè)新的jdk:

          1. 打開emacs.

          2. 輸入 M-x customize-variable 并回車.

            Emacs 提示你要自定義的變量名.

          3. 輸入 jde-jdk-registry 并回車.

            jde-jdk-registry 的配置界面.

          4. INS 按鈕.

            顯示 JDK 項(xiàng).

          5. 輸入JDK的版本號 和 JDK 的安裝路徑.

          6. 重復(fù)先前的步驟.

          7. State 按鈕.

            State 菜單顯示.

          8. 選擇 Save for Future Sessions .

            Note

            This saves the setting of jde-jdk-registry in your .emacs file.

          9. Finish button保存.

          選擇JDK

          選擇 JDK:

          1. 輸入 M-x customize-variable 并回車.

            Emacs 提示你要自定義的變量.

          2. 輸入 jde-jdk 并回車.

            jde-jdk 的配置界面.

            緩沖區(qū)里顯示注冊的jdk的列表.

          3. 按radio button 選擇你要使用的jdk.

          4. State 按鈕.

            State 菜單顯示.

          5. 選擇 Save for Future Sessions.

          6. 按  Finish 按鈕 保存設(shè)置.

          posted @ 2005-08-08 17:16 ivaneeo 閱讀(363) | 評論 (0)編輯 收藏

          我的java是jre1.4.2的.
          首先是進(jìn)入firefox的插件目錄.我的是~/.mozilla/plugins.
          然后是確定jre的插件目錄.我的是~/programs/j2sdk1.4.2_08/jre/plugin/i386/ns610-gcc32.這里是使用gcc32的系統(tǒng).
          最后是做連接.具體如下:
          $cd ~/.mozilla/plugins
          $ln -s ~/programs/j2sdk1.4.2_08/jre/plugin/i386/ns610-gcc32/libjavaplugin_oji.so
          重起firefox,確定插件是否安裝成功.在firefox輸入about:plugins.有就成功了.
          posted @ 2005-08-08 14:54 ivaneeo 閱讀(997) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共67頁: First 上一頁 54 55 56 57 58 59 60 61 62 下一頁 Last 
          主站蜘蛛池模板: 上虞市| 汪清县| 宜君县| 松溪县| 郑州市| 定兴县| 色达县| 武冈市| 东至县| 两当县| 扬中市| 利津县| 九龙县| 永仁县| 香格里拉县| 仙居县| 黄梅县| 祁阳县| 东兰县| 阳朔县| 伊川县| 沧州市| 福贡县| 松滋市| 舒城县| 博野县| 吉首市| 阿拉善左旗| 宁都县| 平利县| 阳西县| 九龙城区| 阜新| 聂荣县| 右玉县| 周宁县| 伊吾县| 辉南县| 璧山县| 大方县| 綦江县|