2011-01-11 7 views
1

私のプログラムは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 次のコマンドを使用して、両方のプログラムを正常にコンパイルしました: -

であり、クラスファイルを生成しました。私は、次のコマンドを使用してフルーツのプログラムを実行するために管理しなかった : - 私はAppleのプログラムのために同じことをしようとしたとき

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のcert試験の準備をしようとしているので、私はこの例をMcGrawHill出版の書籍、Kathy SierraとBert Batesによって書いています。

ありがとうございます!


編集#2

それは、コードが本の中であったかあったので、はい、私でした。パッケージ文をインクルードしなくてもファイルを実行できる方法はありますか? 2つのファイルをコンパイルする

  1. 試み - :

    これは問題がどのように見えるかです。 Appleクラスを使用する場合は、 にFruit.classファイルをfoodサブディレクトリに配置してください。


編集#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 
+1

あなたのアップルクラスに 'package food;'ステートメントがありますか? –

+1

@SB:例外メッセージは明確な証拠です。 – BalusC

+1

@BalusC - haだからです。 –

答えて

2

働いていました。このようにそれを作る、それが

package food; 
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); 
} 
} 

更新動作します:あなたは

G:\>java -classpath G:\Java food.Apple 
Exception in thread "main" java.lang.NoClassDefFoundError: food/Apple (wrong name: Apple) 

の下に実行

とき、それはそこからクラスパスにG:\Javaが追加されますが、それは比較的クラスリンゴを検索します食品内DIR パッケージ名を指定food

または。クラス内でパッケージを指定したくない場合は、

G:\>java -classpath G:\Java\food Apple 
関連する問題