package Problem
-
Hallo!
Folgende Verzeichnisstruktur existiert
[name]: sind Verzeichnisse name: sind Dateien [demo001\myapp] | |- myapp.java | | |------[demo001\myapp\util] | |------- util_1.java |------- util_2.java | | |------[demo001\myapp\helper] | |------- helper.java
Hier kurz die package/import Angaben der einzelnen Dateien:
// myapp.java package demo001.myapp; import demo001.myapp.util.*; // util_1.java und util_2.java package demo001.myapp.util; import demo001.myapp.helper.* // helper.java package demo001.myapp.helper;
Kompilieren lässt sich alles problemlos (ich gehe eine Verzeichnisebene höher). Ich kompiliere erst die helper, dann die utils und zum Schluss myapp.java.
Beim Ausführen von myapp.java bekomme ich den Fehler:
Exception in thread "main" java.lang.NoClassDefFoundError: demo001\myapp\myapp (wrong name: demo001\myapp\myapp) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Weiß jemand Rat?
Gruß Achim
-
Wie sieht denn die Klasse aus in der die main liegt?
... weil wenn ich mir den Stacktrace so ansehe liegt der fehler vermutlich irgendwo dort.
-
dark-eye schrieb:
Wie sieht denn die Klasse aus in der die main liegt?
... weil wenn ich mir den Stacktrace so ansehe liegt der fehler vermutlich irgendwo dort.
Die Klasse sieht wie folgt aus.
package demo001.myapp; import demo001.myapp.util.*; public class myapp { public static void main(String args[]) { util_1 u1 = new util_1(); System.out.println(util_1.Test()); } }
-
Hallo,
wo werden denn die Klassen hinkompiliert? Das Verzeichnis muss im Classpath definiert sein, denn die NoClassDefFoundException heißt meines Wissens, dass das .class-File mit dem Java-Bytecode nicht gefunden wurde...
Bei folgendem
C:\Classes\demo001\myapp\myapp.class C:\Classes\demo001\myapp\util\util_1.class C:\Classes\demo001\myapp\util\util_2.class C:\Classes\demo001\myapp\helper\helper.class
müsste dann der Aufruf so sein
java -cp"C:\Classes\" demo01.myapp.myapp
sein... (is ausm Kopf also nicht unbedingt festnageln auf die Syntax, im Zweifel "java -help" eingeben )
Gruß
-
wenn du die möglichkeit hast besorg dir den editor eclipse http://www.eclipse.org/
der ist kostenlos (open source) und zum java entwickeln wirklich extrem angenehm. gibt ne version für jedes betriebssystem.
wenn ein fehler mit deiner verlinkung vorliegt würde eclipse die entsprechende stelle schon beim editieren hervorheben. und er kompiliert auch alles für dich, ohne dass du dich drum kümmern musst, was wo liegt.noch zwei allgemeine tips:
- klassen namen immer mit großbuchstaben beginnen, package namen immer mit kleinbuchstaben. so siehst du schon im code ob es sich um package oder klasse handelt und es kommt nicht so leicht zu fehlern.
- wenn du aus einem package importierst, dann importiere ausschließlich die klassen, die du benötigst// vermeiden: import packageName.*; // empfohlen import packageName.SpezielleKlasse;
dadurch weist du immer ganz genau, welche klassen geladen werden und du kannst davon ausgehen, dass fehler, wenn sie auftreten, in einer von diesen liegen.
sorry, dass das nur eine inderekte hilfe ist. ich hoffe trotzdem, dass mein rat dir von nutzen ist