2011-01-11 1 views
1

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 à: -

  1. 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 
+1

Avez-vous une instruction 'package food;' dans votre classe Apple? –

+1

@SB: le message d'exception est une évidence. – BalusC

+1

@BalusC - Il en est ainsi. –

Répondre

2

parce que vous n'avez pas spécifié emballage alimentaire pour cela. faire comme ça et il fonctionnera

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

Mise à jour:

Lorsque vous exécutez ci-dessous

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

il ajoutera G:\Java dans le chemin de la classe à partir de là il recherche relativement à la pomme de classe dans les aliments DIR avec le nom du colis spécifié food

Or. En Si vous ne voulez pas spécifier de paquet dans la classe alors

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