2017年2月5日 星期日

用 cmd (命令列) 執行java程式

參考
https://caterpillar.gitbooks.io/javase6tutorial/content/c2_2.html

1.環境設定
設定 Path 變數是為了讓作業系統找到指定的工具程式(以 Windows 來說的話就是找到 .exe 檔案),則設定 Classpath 的目的就是為了讓Java執行環境找到指定的 Java 程式(也就是.class檔案)。

-設定path(jdk路徑)
-設定classpath(之後要去哪裡找class檔)

方法一
最簡單的方法是在系統變數中新增 Classpath 環境變數,在上圖中的「系統變數」按下「新增」鈕,在「變數名稱」欄位中輸入「Classpath」,在「變數值」欄位中輸入 Java 類別檔案的位置,例如可以輸入「.;C:\Program Files\Java\jdk1.6.0\ lib\tools.jar; C:\Program Files\Java\jre1.6.0\lib\rt.jar」(jar 檔是 zip 壓縮格式,當中就包括了 .class 檔案以及 jar 中的 Classpath 設定),每一筆資料中間必須以「;」作為分隔。

方法二
使用的 JDK 工具程式有 Classpath 指令選項,在執行工具程式時一併指定 Classpath:

javac -classpath classpath1;classpath2 …

方法三
文字模式下執行以下的指令,以直接設定目前的環境變數包括 Classpath 變數(這個設定在下次重新開啟文字模式時就不再有效):

set CLASSPATH=.;classpath1;classpath2

重點觀念:
少了 < .; > 會造成執行正確和錯誤的強烈差距
.』這個小細節是有一些原因的.
在沒有做任何設定之下 , 預設的CLASSPATH就是一個『.
這個『.』代表 命令提示字元的當前目錄
沒設定比設定錯誤還好一點點(對新手而言) , 只要 .class 在當前目錄 , 你還是可以執行程式

但是你若下了設定 
SET CLASSPATH=C:\j2sdk1.4.1_03\lib;C:\j2sdk1.4.1_03\lib\tools.jar;
少了這個. 若你當前的目錄卻不是 C:\j2sdk1.4.1_03\lib , 就會發生NoClassDefFoundError

正確的設定
SET CLASSPATH=.;C:\j2sdk1.4.1_03\lib;C:\j2sdk1.4.1_03\lib\tools.jar;

1.表示當前的目錄 , 
2.C:\j2sdk1.4.1_03\lib\ , 
3.以及 tools.jar 內的class都可以載入 


2.範例
a.撰寫java程式(帶有package test; → 之後執行時,路徑要特別注意)

b.進行編譯javac (順便指定classpath)
javac -classpath C:\Users\ytchen\Desktop\test test6.java

c.執行class檔
路徑:C:\Users\ytchen\Desktop\test>
命令:java test6
若是在程式碼中,有設定package的情況下,路徑要修改,否則會找不到檔案
(程式會去找test\test\test6)

所以要往上一層
並且利用『.』的方式,設定目錄,告知檔案在哪
路徑:C:\Users\ytchen\Desktop>
命令:java test.test6




沒有留言:

張貼留言