2010-06-02 2 views
2

J'ai un programme client/serveur qui tente d'envoyer et de recevoir un objet.La compilation et l'exécution via commandLine montre NoClassDefFoundError lors de la tentative de recherche de package Java

Il y a trois packages: serveur, client et partagé partagé ne contient que la classe Message

Je mets Message.java de package partagé dans le même dossier que les fichiers sources de package calcclient et les fichiers sources de package calcserver.

Je compile en utilisant la ligne: javac -classpath. (longue liste de fichiers client ou server.java) Message.java Ils peuvent compiler. Ensuite, je change de répertoire d'un niveau et a couru avec: java -classpath. Lorsque j'utilise Netbeans pour fonctionner, le programme entier fonctionne normalement. Mais pas si je cours depuis la ligne de commande. Si elle est exécutée via une ligne de commande, le programme fonctionnera jusqu'à ce qu'il ait besoin d'utiliser l'objet Message. Ensuite, il affichera un NoClassDefFoundError

Est-ce que je mets les bons fichiers au bon endroit? Comment est-ce que j'obtiens le programme pour trouver le paquet partagé par la ligne de commande?

Répondre

2

Les fichiers ne sont pas au bon endroit. La classe Message appartient à un package différent, elle ne devrait donc pas cohabiter avec les autres classes. De http://java.sun.com/j2se/1.5.0/docs/tooldocs/findingclasses.html:

Les classes d'utilisateurs sont des classes qui construisent sur la plate-forme Java. Pour rechercher les classes utilisateur , le programme de lancement fait référence au chemin d'accès de classe d'utilisateur - une liste de répertoires , d'archives JAR et d'archives ZIP qui contiennent des fichiers de classe.

Un fichier de classe a un nom de sous-chemin qui reflète le nom complet de la classe. Par exemple, si la classe com.mypackage.MyClass est stocké sous /myclasses, puis/myclasses doivent être en le chemin de classe d'utilisateur et le chemin complet au fichier de classe doit être /myclasses/com/monpaquet/MyClass .classe. Si la classe est stockée dans une archive myclasses.jar nommé, alors myclasses.jar doit être dans le chemin de la classe utilisateur et le fichier de classe doit être stockée dans l'archive com/monpaquet/MyClass.class.

Vous avez deux options:

La meilleure solution est de prendre le temps d'apprendre Ant.Les projets Netbeans sont construits avec Ant, qui est une très bonne fonctionnalité de Netbeans dans mon livre, et vous pouvez ouvrir le build.xml dans votre projet et trouver une description raisonnablement bien commentée de Netbeans pour construire votre projet. Et vraiment, je ne pense pas qu'il y aurait beaucoup d'endroits autour de cette course construit à partir de la ligne de commande, donc apprendre quelque chose comme Ant serait une aide précieuse. Le niveau de sophistication suivant consisterait à construire manuellement un Jar pour votre paquet partagé et à le placer quelque part sur le chemin de classe. L'approche la plus basique consiste simplement à compiler les fichiers java dans des fichiers de classe et à les placer dans le répertoire approprié reflétant le nom du paquet comme expliqué dans la citation ci-dessus.

1

Si vous construisez votre projet dans NetBeans, vous verrez qu'il existe un dossier dist dans lequel vous pouvez trouver votre projet en code binaire. Après avoir généré le code source, NetBeans spécifie comment démarrer votre projet à partir de la ligne de commande. Si vous utilisez ceci et que le problème persiste, vous devriez reconstruire votre classe Message en tant que bibliothèque, la lier au projet en utilisant NetBeans et le projet devrait fonctionner à partir de la ligne de commande en utilisant la commande spécifiée dans NetBeans.

Si vous voulez compiler manuellement vos fichiers source, je pense que la meilleure solution est de google quelque chose comme ceci: la compilation manuelle du code source Java

0

Citer la valeur du chemin de classe s'il contient des espaces.

java -classpath C:\Program Files\java\...;C:\... 
         ^
          This is what's killing you slowly. 

Essayez cette façon:

java -classpath "C:\Program Files\java\...;C:\..." 
Questions connexes