JAVA

1 JAVA 的編輯與執行

可以使用最簡單的文字編輯器編輯 JAVA 程式碼,使用命令列編譯並執行 JAVA。 如果使用ECLIPSE FOR JAVA更好,因為可以在編輯的同時,也可以讓 ECLIPSE 執行並偵錯。


2 文字編輯器

使用 ECLIPSE 撰寫並驗證 JAVA 真的很方便,但當要把程式碼用 PACKAGE 的方式包起來的時候,我發現做不到。 於是我就又回到文字編輯器的方式編輯JAVA程式碼,之後,再用主控台的方式編譯並執行JAVA的程式碼。 在 ECLIPSE FOR JAVA 的環境中,只要負責寫 JAVA 的程式碼,其餘的事就交給 ECLIPSE 處理就好。 但使用文字編輯器的時候,不只要編寫JAVA的程式碼,還要處理 JAVA 編譯器的相關動作設定。 這裡說明 JAVA 編譯的相關動作。

以我的電腦的安裝為例。
一、因為編譯 JAVA 程式碼的時候,會使用到 JAVA.EXE這隻執行檔。執行 JAVA 程式的時候,會使用到 JAVAC 這支執行檔。 我們需要把這兩個執行檔的路徑設定好,設定方式如下圖所示。把目錄指向目前安裝的 JAVA SDK 目錄的 BIN 子目錄。
我的JAVA的執行檔目錄是 D:\Program Files\Java\sdk1.6.0_16\bin

java

二、編譯JAVA的時候,JAVA.EXE 需要知道目前 JAVA 可使用的類別庫放在何處,這時需要設定 CLASSPATH,設定方式如下圖所示。
我的JAVA的類別庫目錄是 D:\Program Files\Java\sdk1.6.0_16\lib

java

設定了運作的目錄後,再來就是要編寫用文字編輯器寫 JAVA 的程式碼。 文字編輯器可以用NOTEPAD、ULTRAEDIT等文字編輯器。下面就是用記事本編輯 JAVA 程式碼的畫面。

01 myjava.java
01 import java.io.*;
01 public class myjava{
01 	public static void main(String[] args){
01 	    try{
01 	    	FileInputStream file=new FileInputStream("readme.txt");
01 	    	int n,result;
01 	    	while((n=file.available())>0){
01 	    		byte[] Buffer=new byte[n];
01 	    		result=file.read(Buffer);
01 	    		if(result==-1) break;
01 	    		String string=new String(Buffer);
01 	    		System.out.print(string);
01 	    	}
01 	    }	
01 	    catch(IOException e){System.err.println(e);}
01 	    System.out.println();
01 	}
01 }

編輯程式碼後,使用JAVAC.EXE 編譯 JAVA的程式碼(此時產生*.class), 再使用JAVA.EXE執行JAVA(此時執行 *.class,但不用加檔尾 ".class")。

java

以上是使用文字編輯器和主控台編寫並執行 JAVA 的過程。


3 編譯與執行

編譯後,可以再把 JAVA 類別檔成 JAR 格式的單一檔案,可以直接拿來執行。
所以下面的篇幅我要來介紹 PACKAGE 指令和 JAR 檔。

首先,我規劃的 JAVA PROJECT 的目錄如下:
1. swing 是這個PROJECT 的根目錄。
2. src 是放置 JAVA 原始程式碼的目錄,之後我們所編輯的 JAVA程式碼都會放在這個目錄中。
3. classes 是放置編譯完成的類別檔的目錄,這個目錄的目錄結構會跟 src 一模一樣。
4. lib 是放置類別檔的壓縮檔 JAR 檔的目錄。
5. bin 是放置可以直接執行的 JAR 檔的目錄。
6.xwindow 是放置 JAVA 程式碼 WindowMonitor.java 的目錄,當使用到JAVA 的視窗程式的時候,會用到這個目錄的程式碼。

java

package 指令:
用下面兩個程式碼來說明package的用途。
為了讓 JMain.java 可以使用 WindowMonitor.java 的類別,JMain.java 必須 import xwindow ; 為了讓 JMain.java 可以使用 WindowMonitor.java 的類別,WindowMonitor.java 必須加入 package xwindow;。

01 JMain.java
01 import xwindow.WindowMonitor;
01 import java.awt.*;
01 import java.awt.event.*;
01 public class JMain extends Frame implements ActionListener {
01   Button cutButton, copyButton, pasteButton;
01   public JMain() {
01     super("Toolbar Example (AWT)");
01     setSize(450, 250);
01     addWindowListener(new WindowMonitor());
01     Panel toolbar = new Panel();
01     toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));
01     cutButton = new Button("Cut");
01     cutButton.addActionListener(this);
01     toolbar.add(cutButton);
01     copyButton = new Button("Copy");
01     copyButton.addActionListener(this);
01     toolbar.add(copyButton);
01     pasteButton = new Button("Paste");
01     pasteButton.addActionListener(this);
01     toolbar.add(pasteButton);
01     add(toolbar, BorderLayout.NORTH);
01   }
01   public void actionPerformed(ActionEvent ae) {
01     System.out.println(ae.getActionCommand());
01   }
01   public static void main(String args[]) {
01     JMain thisframe = new JMain();
01     thisframe.setVisible(true);
01   }
01 }
01 xwindow\WindowMonitor.java
01 package xwindow;
01 import java.awt.event.*;
01 import java.awt.Window;
01 public class WindowMonitor extends WindowAdapter{
01     public void WindowMonitor(){}
01 	public void windowClosing(WindowEvent e){
01 		Window w=e.getWindow();
01 		w.setVisible(false);
01 		w.dispose();
01 		System.exit(0);
01 	}
01 }

為了編譯這兩支 JAVA 程式碼,要再寫一個批次檔 makejava.bat 。
編譯 JAVA 的程式碼時,必須在程式碼的根目錄 src 執行編譯工作,"cd src" 就是進入程式碼根目錄的動作。 進到程式碼的根目錄後,開始編譯的工作,一行編譯一個檔案,從最遠的檔案開始編譯,最後才編譯 JMain.java。編譯完成後,退回到 JAVA PROJECT 的根目錄 swing。

   makejava.bat
01 cd src
01 javac -d c:\code\java\swing21\classes c:\code\java\swing21\src\xwindow\WindowMonitor.java
01 javac -d c:\code\java\swing21\classes c:\code\java\swing21\src\JMain.java
01 cd ..

最後,讓我們到類別根目錄 classes 執行剛剛編譯好的程式碼吧。

java

JAR 檔:
JAVA 程式碼經過編譯的過程後會產生 *.class,這是 JAVA 的執行碼。 當程式變大,檔案變多的時候,可以使用 JAR 的方式,把許多 class 檔壓縮成一個或數個 JAR 檔,方便管理。 甚至也可以直接用 JAR 檔執行 JAVA的程式。

在 PROJECT 根目錄,使用下列指令可以生成 JMain.jar,JAVA 的類別庫。
./lib/JMain.jar 指明要產生的 JAR 檔將要放置的位置是 lib 目錄下的 JMain.jar,而來源的類別檔是 classes 目錄下的所有類別檔,包含子目錄中的所有類別檔。

   makelib.bat
01 jar cvf ./lib/JMain.jar -C classes /

使用這個 JAR 執行 JAVA 的方法如下,必須在 JMain.jar 後面加上 JMain,以指明要執行的類別名稱。

java

可直接執行的 JAR 檔:
在壓縮成 JAR 檔的時候,指明 manifest.txt 檔,這樣就生成可以直接執行的 JAR 檔。

manifest.txt 的內容如下:

   manifest.txt
01 Main-Class: JMain

產生 JAR 的批次檔內容如下:
./lib/JMain.jar 指明要產生的 JAR 檔將要放置的位置是 lib 目錄下的 JMain.jar , manifest.txt 指明內定執行的類別名稱, 而來源的類別檔是 classes 目錄下的所有類別檔,包含子目錄中的所有類別檔。

   jarexecutable.bat
01 jar cvfm ./bin/JMain.jar manifest.txt -C classes /

使用這個 JAR 執行 JAVA 的方法如下圖所示,因為在 manifest.tst 中就已經指明要執行的類別名稱了,所以直接執行 JAR 即可。

java

4 使用 APACHE ANT

當 JAVA 程式碼檔案太多,並且分散在不同的目錄時,要如何編譯 JAVA 呢?這時可以使用 APACHE ANT 這套編譯輔助工具。 ANT 的用法很簡單,需要一個編譯檔 build.xml 在原始碼的根目錄,接著在該目錄中執行 ant.bat 即可。

這樣簡單工具的安裝步驟也很容易。 到 http://ant.apache.org/bindownload.cgi 下載壓縮包 apache-ant-1.8.2-bin.zip。 將檔案解壓縮後複製到根目錄。到控制台的系統的進階設定=二個環境變數。
1.新增環境變數 ANT_HOME,變數值 C:\apache-ant-1.8.2。
2.新增路徑 C:\apache-ant-1.8.2\bin 到環境變數 Path。
3.將 build.xml 放置在原始檔的根目錄。

另外,原始檔的目錄必須佈局為 src、lib、classes 三個目錄。 src 存放所有 java 原始檔,lib 存放原始檔會參考到的類別庫檔(jar檔),classes 存放編譯後的類別檔(class檔)。

案子的根目錄。

java

案子的類別庫檔目錄。

java

案子的原始碼目錄。這裡顯示出來的是編譯前,actions 目錄中的 JAVA 原始檔。

java
   build.xml
01 <project name="Database Example" default="compile" basedir=".">
01 <description>This is a build file for the project</description>
01   <property environment="env"/>
01   <property name="tomcat.home" value="${env.CATALINA_HOME}"/>
01   <property name="lib.path" value="lib"/>
01   <property name="classes.path" value="classes"/>
01   <property name="source.path" value="src"/>
01   <path id="classpath">
01     <pathelement location="${tomcat.home}/lib/servlet.jar"/>
01   </path>
01   <target name="create-dir">
01     <mkdir dir="${classes.path}"/>
01   </target>
01   <target name="compile" depends="create-dir"
01           description="Compile Java codes">
01     <javac classpathref="classpath" 
01            destdir="${classes.path}"
01            srcdir="${source.path}"
01            includes="**/*.java"/>
01   </target>
01   <target name="clean" description="Remove all generated class files">
01     <delete includeEmptyDirs="true">
01       <fileset dir="${classes.path}" includes="**/*"/>
01     </delete>
01   </target>
01 </project>

ANT 的執行過程與結果。

java

編譯後,產生的類別檔目錄。這裡顯示出來的是編譯後,actions 目錄中的類別檔群。

java

5 使用 ECLIPSE

可以用 ECLIPSE 這套軟體來編寫並執行 JAVA 程式。ECLIPSE 可以到 HTTP://WWW.ECLIPSE.ORG/DOWNLOADS/ 下載, 有支援 C/C++ 和 JAVA 的版本,要下載 JAVA 的版本才可以。

java