2009-09-28 8 views
0

Je sais qu'il ya beaucoup de messages concernant NoClassDefFoundError, ils semblent tous parler de fichiers jar. Bien que je sois à l'aise avec java dans Eclipse, je ne comprends pas pourquoi la chose la plus simple que je puisse trouver ne fonctionne pas, à moins qu'ils ne cassent quelque chose du côté de l'université.Java dans bash à l'université échoue avec NoClassDefFoundError

public class hello { 
    public static void main (String args[]) { 
      System.out.println ("Hello World!"); 
    } 
} 

Ceci est l'ensemble du programme hello.java qui jette ceci:.

Exception in thread "main" java.lang.NoClassDefFoundError: hello/java 
Caused by: java.lang.ClassNotFoundException: hello.java 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
Could not find the main class: hello.java. Program will exit. 

$ CLASSPATH = /:/usr/java/latest/lib:/home/41/myusername/bin

java -verbose hello.class 

donne:

 
[Opened /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.Object from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.io.Serializable from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.Comparable from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.CharSequence from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.String from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.reflect.GenericDeclaration from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.reflect.Type from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.reflect.AnnotatedElement from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
[Loaded java.lang.Class from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
... 
[Loaded sun.misc.AtomicLong from /usr/java/jdk1.6.0_10/jre/lib/rt.jar] 
... 

avec le EXC eption à nouveau.

 
java -version 

donne:

 
java version "1.6.0_10-rc2" 
Java(TM) SE Runtime Environment (build 1.6.0_10-rc2-b32) 
Java HotSpot(TM) Server VM (build 11.0-b15, mixed mode) 
+0

@Joachim comment avez-vous fait la belle boîte de défilement? est-il possible de voir le balisage utilisé pour éditer mon message? Je veux apprendre à le faire aussi. – Maslow

Répondre

3

Je suppose que vous vous avez fait compilez la classe première ?:

javac hello.java 
java hello 
+0

Je pensais que java n'était pas un langage compilé. – Maslow

+0

@Maslow: bien sûr, c'est un langage compilé. Il est compilé en code octet. –

+0

C'est sûr - mais si vous voulez prétendre que ce n'est pas vous pourriez jeter un oeil à groovy. – Henry

9

Tout d'abord, compiler votre fichier en utilisant le .javajavachello.java pour produire un fichier hello.class. Ensuite, exécutez la classe en utilisant la commande javahello - vous n'incluez pas l'extension .class lorsque vous utilisez la commande java.

En outre, je tiens à souligner que c'est une convention que les noms de classe commencent par une lettre majuscule - hello devrait être Hello.

+0

ouais je suis habitué aux lettres majuscules pour la classe en C#, et j'ai essayé de le renommer en majuscule au cas où c'était le problème. – Maslow

+0

java hello ne fonctionne pas, jusqu'à ce qu'il soit compilé apparemment, j'ai raté l'étape de compilation et ne connaissait pas la différence entre .java et .class – Maslow

2
java -verbose hello.class 

... signifie « hey, Java, exécutez la principale méthode() dans la classe 'Hello.class'.

Java ne peut pas trouver une classe nommée "Hello.class". Votre la classe est appelée "Bonjour"

java -verbose hello 

Depuis '.' est dans votre classpath, Java trouve la classe « bonjour » dans » ./hello.class'

Astuce supplémentaire:.. il est classique en Java pour démarrer des cours avec une lettre majuscule

public class Hello { 

Cela aide de faire la distinction entre les références de classe et les références variables dans le reste de votre code.

Dessert dessert= new Dessert("tiramisu") 
+2

Est-ce que Desert est une sous-classe de Dessert? ;-) –

+0

Oups. Comme c'est maladroit. Fixation. – slim

+0

@slim - java bonjour ne fonctionne pas, jusqu'à ce qu'il soit compilé apparemment, j'ai raté l'étape de compilation et ne connaissait pas la différence entre .java et .class – Maslow

Questions connexes