2011-05-08 2 views
1

Je travaille sur un projet Java dans NetBeans et il fonctionne parfaitement lorsque j'appuie sur le bouton Exécuter le projet. Cependant, j'ai besoin de lancer le programme depuis le terminal. J'ai ouvert le répertoire qui contient le fichier de classe, search.class et essayé de courir avecJava NoClassDefFoundError quand le fichier .class existe

java search 

Cependant, je reçois une erreur:

Exception in thread "main" java.lang.NoClassDefFoundError: search (wrong name: search/search) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:616) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 

Je ne peux pas pour la vie de me comprendre pourquoi il dit "mauvais nom" puisque search.class existe dans ce répertoire. Ma seule pensée est qu'il y a des fichiers .jar que j'appelle de mon programme (ils sont dans le même répertoire) et peut-être que je dois les inclure à l'exécution?

Toute aide serait grandement appréciée!

EDIT: Il s'est avéré que c'était probablement un problème de ne pas inclure les fichiers .jar. Je l'ai corrigé en allant dans le dossier dist/où le projet entier est empaqueté en jar et en l'exécutant comme java -jar search.jar

Merci pour tous les commentaires!

+3

Est-ce que cette classe est dans un paquet? Quel est le nom de la classe? Pouvez-vous montrer la signature de la classe? C'est la ligne qui commence ... 'public class MyClass {' Dans quel paquet appartient la classe? –

Répondre

2

La raison classique pour NoClassDefFoundError est une exception provenant de l'initialiseur statique de la classe.

+2

Bien que, maintenant que je pense à ce sujet, il peut également survenir lorsque le nom de classe dans un fichier de classe ne correspond pas au nom du fichier de classe, y compris le paquet. –

+1

C'est mon soupçon, et une raison commune pour cela est de ne pas utiliser le nom du paquet correctement. –

3

Si votre classe est dans un package, vous devez transmettre le nom complet de la classe.

package org.example; 

public class Search { 
    ... 
} 

Vous devrez exécuter comme

java org.example.Search 

Le répertoire courant doit contenir org sous-répertoire, qui à son tour contient example répertoire où se trouve Search.class. Vous pouvez utiliser le paramètre -cp pour spécifier l'emplacement de vos fichiers de classe.

Questions connexes