[問題] package 與 classpath 的問題
大家好,我現在正在學習在 java 中使用自訂的 package,遇到了一個問題,雖然有
解決的方法,但我不知道原因為何,我將我遇到問題到解決的狀況敘述在下面:
假設自訂的 package 路徑為 e:\myJava,我寫了一個 Cbox 的 class 放在
e:\myJava\myData\math 下,程式碼為:
package myPkg.math;
public class Cbox
{
private int length;
private int width;
private int height;
public Cbox(int l, int w, int h) {
length = l;
width = w;
height = h;
}
public void show() {
System.out.print("L = " + length + ", W = " + width);
System.out.println(", H = " + height);
System.out.println("Volume = " + vol());
}
public int vol() {
return length*width*height;
}
}
接下來,我寫了一個程式來測試我的 package,檔名 myTest.java,程式碼如下:
import myPkg.math.Cbox;
public class myTest
{
public static void main(String[] args) {
Cbox box = new Cbox(3, 5, 7);
box.show();
System.out.println("OK!");
}
}
現在來了,我嘗試用兩種不同的情況去編譯跟執行。
《 Case 1 》
我將 myTest.java 放在 e:\myJava 下並使用下面的指令編譯
javac -cp e:\myJava myTest.java
編譯通過,然後我再用下面的指令執行
java -cp e:\myJava myTest
可以正確執行。
《 Case 2 》
我將 myTest.java 放在 e:\myJava\myTest 下,編譯的方法如同 case 1,一樣可以
正確編譯,但是在執行時,使用 case 1 的方法確不行執行,並出現以下的錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError: myTest
Caused by: java.lang.ClassNotFoundException: myTest
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
我一直找不出個所以然,後來我參考了其它書本,修改了一個小地方,就能順利執行了。
原本在 case 1 中執行的方法我改成了
java -cp e:\myJava; myTest
只是加了一個分號,就可以執行了,我對這個問題一直很疑惑,想請教板眾,希望能為
我解答一下。
我所使用的是 1.6.0_05 這個版本。
※ 編輯: sawfish 來自: 125.224.214.136 (04/22 22:47)
推
04/23 09:34, , 1F
04/23 09:34, 1F
推
04/23 10:14, , 2F
04/23 10:14, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):