Mon programme ci-dessous est appelé Apple.javajava classpath requête avec statment liées à l'importation
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);
}
}
Ceci est un autre programme appelé Fruit.java
package food;
public abstract class Fruit{
public static void main(String[] args){
int x=10;
System.out.println("x is "+x);
}
}
Ces deux programmes sont stockés dans le chemin du répertoire : - G: \ Java \ la nourriture j'ai compilé avec succès à la fois les programmes à l'aide de la commande suivante: -
G:\>javac Java\food\*.java
et il a produit des fichiers de classe. J'ai réussi à exécuter le programme de fruit en utilisant la commande suivante: -
G:\>java -classpath G:\Java food.Fruit
Cependant, quand j'ai essayé de faire la même chose pour le programme d'Apple, il a donné lieu à des messages d'erreur.
G:\>java -classpath G:\Java food.Apple
Exception in thread "main" java.lang.NoClassDefFoundError: food/Apple (wrong name: Apple)
Quelqu'un pourrait m'aider s'il vous plaît à comprendre ce qu'est l'erreur? J'essaie de me préparer pour l'examen de certification SCJP et je renvoie cet exemple au livre de McGrawHill écrit par Kathy Sierra et Bert Bates.
Merci!
Edit # 2
Oui, je l'ai parce que c'était comment le code était dans le livre. Est-il possible de continuer à exécuter le fichier sans avoir à inclure l'instruction package?
C'est ce que la question ressemble à: -
- Tentative de compiler les deux fichiers. Si vous souhaitez utiliser la classe Apple, créez en veillant à placer le fichier Fruit.class dans le sous-répertoire food.
Edit # 3
J'ai essayé cela et a obtenu les erreurs suivantes
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
J'ai réussi à l'exécuter sans avoir pour inclure la déclaration emballage alimentaire;
G:\>java -classpath G:\Java\food;G:\Java Apple
x+y is 30
Ce que je changé est que je déplacé le fichier Apple.class dans un dossier séparé qui est logique car le dossier « nourriture » est une indication de l'emballage et que tous les fichiers Darvis indiqué dans le dossier nécessaire pour avoir la nom du paquet sinon il ne serait pas exécuté.
Edit # 5 Cela a fonctionné trop
G:\>java -classpath G:\Java Apple
x+y is 30
Avez-vous une instruction 'package food;' dans votre classe Apple? –
@SB: le message d'exception est une évidence. – BalusC
@BalusC - Il en est ainsi. –