我的程序以下稱爲Apple.javaJava類路徑相關的查詢
import food.Fruit;
class Apple extends Fruit{
public static void main(String[] args){
int y=20,z=0;
z=y+10;
System.out.println("x+y is "+z);
}
}
這是另一個叫Fruit.java程序
package food;
public abstract class Fruit{
public static void main(String[] args){
int x=10;
System.out.println("x is "+x);
}
}
這兩個程序都存儲在下面的目錄路徑: - G:\ Java \ food 我確實使用以下命令編譯了這兩個程序: -
G:\>javac Java\food\*.java
它生成了類文件。 我還是設法使用下面的命令來執行程序水果 -
G:\>java -classpath G:\Java food.Fruit
然而,當我試圖爲蘋果計劃做同樣的它導致的錯誤消息。
G:\>java -classpath G:\Java food.Apple
Exception in thread "main" java.lang.NoClassDefFoundError: food/Apple (wrong name: Apple)
請問有人能幫我弄清楚錯誤是什麼?我正努力讓自己準備好參加SCJP證書考試,因此我將這個例子引用到由Kathy Sierra和Bert Bates編寫的McGrawHill出版物書籍中。
謝謝!
編輯#2
是的,我確實因爲那是怎樣的代碼是在書中。有沒有一種方法可以繼續執行文件,而無需包含聲明。
這是問題的樣子: -
- 試圖編譯兩個文件。如果要使用Apple類,請確保將Fruit.class文件放置在食品子目錄中,即 。
編輯#3
我做了嘗試,並得到了以下錯誤
G:\>java -classpath G:\Java\food Apple
Exception in thread "main" java.lang.NoClassDefFoundError: food/Fruit
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
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)
Caused by: java.lang.ClassNotFoundException: food.Fruit
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)
... 12 more
Could not find the main class: Apple. Program will exit.
編輯#4
我還是設法執行它,而無需包括聲明 包食物;
G:\>java -classpath G:\Java\food;G:\Java Apple
x+y is 30
我改變什麼,我搬到了Apple.class文件到一個單獨的文件夾這是有道理的,因爲該文件夾的「食物」是包的指示和Darvis指出有需要的文件夾中的所有文件包名稱,否則它不會執行。
編輯#5 這工作太
G:\>java -classpath G:\Java Apple
x+y is 30
你在你的Apple類中有`package food;`語句嗎? – 2011-01-11 18:28:39