2011-01-11 9 views
1

Mein Programm unten genannt wird Apple.javaJava Classpath im Zusammenhang Abfrage mit Import statment

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

Dies ist ein weiteres Programm namens Fruit.java ist

package food; 
public abstract class Fruit{ 
    public static void main(String[] args){ 
    int x=10; 
    System.out.println("x is "+x); 
    } 
} 

Beide Programme in folgenden Verzeichnispfad gespeichert werden : - G: \ Java \ food Ich habe erfolgreich beide Programme mit dem folgenden Befehl kompiliert: -

und es erzeugte Klassendateien. Ich habe es geschaffen, das Obst Programm mit dem folgenden Befehl auszuführen: -

G:\>java -classpath G:\Java food.Fruit 

Allerdings, wenn ich das gleiche für das Apple-Programm zu tun versucht, es zu Fehlermeldungen geführt.

Könnte mir bitte jemand helfen, herauszufinden, was der Fehler ist? Ich versuche, mich für das SCJP-CERT-Examen vorzubereiten, und daher verweise ich dieses Beispiel auf das McGrawHill-Buch von Kathy Sierra und Bert Bates.

Danke!


Edit # 2

Ja, ich habe denn das war, wie der Code in dem Buch war. Gibt es einen Weg, wie ich die Datei noch ausführen könnte, ohne die Package-Anweisung einbeziehen zu müssen. Diese

ist, was die Frage wie folgt aussieht: -

  1. Versuch, die beiden Dateien zu kompilieren. Wenn Sie die Apple-Klasse verwenden möchten, machen Sie sicher, dass Sie die Fruit.class-Datei in dem Essen-Unterverzeichnis platzieren.

Edit # 3

habe ich versucht, dass und bekam die folgenden Fehler

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. 

Edit # 4

ich es schaffte auszuführen, ohne dass die Aussage enthalten Paket Essen;

G:\>java -classpath G:\Java\food;G:\Java Apple 
x+y is 30 

Was änderte ich war ich der Apple.class in einen separaten Ordner, die Sinn macht Datei verschoben, da der Ordner „Essen“ ist ein Hinweis auf der Verpackung und als Darvis wies alle Dateien im Ordner benötigt, um die Paketname andernfalls würde es nicht ausgeführt werden.


Edit # 5 Das funktionierte auch

G:\>java -classpath G:\Java Apple 
x+y is 30 
+1

Haben Sie eine 'package food;' Anweisung in Ihrer Apple-Klasse? –

+1

@SB: die Ausnahmebedingungsnachricht ist ein klarer Beweis. – BalusC

+1

@BalusC - ha so ist es. –

Antwort

2

, weil Sie nicht Lebensmittel-Paket für die angegeben haben. machen es so und es wird funktionieren

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

Update:

Wenn Sie unter

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

ausführen es G:\Java in Klassenpfad hinzufügen, werden von dort aus wird es relativ zur Klasse Apfel suchen in Lebensmittel DIR mit Paketname angegeben food

Or. En Wenn Sie in der Klasse kein Paket angeben möchten, dann

G:\>java -classpath G:\Java\food Apple