NoClassDefFoundError beim ausführen einer Klasse
Ich versuche zu laufen eine Klasse, aber ich bekomme die folgende Fehlermeldung:
java.lang.NoClassDefFoundError: MyClass
Caused by: java.lang.ClassNotFoundException: MyClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main"
Passiert es, obwohl die main
Methode ist in MyClass
und ich laufen direkt in dieser Klasse.
Warum ist diese Klasse nicht gefunden, obwohl ich das Programm starten werden?
Hier einige code:
public class MyClass extends A implements B{
public MyClass() throws Exception {
//make some initializations
}
public static void main(final String[] args) throws Exception {
MyClass myClass = new MyClass();
//do stuff with myClass
}
}
PS: ich bin mit Eclipse Indigo
.
BEARBEITEN
Ich habe die Klasse in der Befehlszeile zweimal:
D:\Eclipse JEE\Workspace2\Example\target\classes\com\example\main>java com.example.main.MyClass
Exception in thread "main" java.lang.NoClassDefFoundError: com/example/main/MyClass
Caused by: java.lang.ClassNotFoundException: com.example.main.MyClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com.example.main.MyClass. Program will exit.
D:\Eclipse JEE\Workspace2\Example\target\classes\com\example\main>java GeoDAOImpl
Exception in thread "main" java.lang.NoClassDefFoundError: MyClass(wrong name: com/example/main/MyClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
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:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: MyClass. Program will exit.
- Sind die Klasse und der default-Konstruktor
public
? - Ja, es ist
public
- Bitte zeigen, wie Sie versuchen, den code auszuführen, und ein kurzes, aber vollständiges Beispiel für den code in Frage.
- bitte haben Sie einen Blick auf, wie das Problem zu beheben, javarevisited.blogspot.com/2011/06/...
- Die Frage wurde aktualisiert.
- Sie haben nicht noch gezeigt, wie man läuft es. "Ich Laufe direkt diese Klasse" ist nicht sehr präzise. Was sind A und B hier? Ist deine Klasse wirklich nicht in einem Paket?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie nicht wirklich uns genug Informationen, um sicher sagen, aber meine Vermutung ist, dass entweder:
Ein Beispiel für den ersten Fall, wenn Ihr code wie folgt aussieht:
Dann sollten Sie ausgeführt werden:
EDIT: Mit den zusätzlichen Informationen, ich vermute, ich weiß, was passiert ist. Ich vermute, der war Klasse erstellt nicht in einem Paket, und eine Run Configuration erstellt wurde, was gerade so läuft
MyClass
. Es wurde jetzt verschoben incom.example.main
, aber ohne die Run-Konfiguration wird aktualisiert.Gehen in der Run Configuration editor (klicken Sie auf den dropdown-neben dem "run" - Taste, und wählen Sie " Run Configurations...) und finde "MyClass", dann überprüfen, welche Klasse findet, und Bearbeiten Sie Sie, um den richtigen Paketnamen in.
Eclipse Indigo
als IDE, so darf ich nicht kompilieren es selbst. Ich habe ein update gemacht auf die Frage.Example
im Paketcom.example.main
. Ich öffne das Projekt, das Paket öffnen und im inneren, ich mache einen rechts-Klick auf die KlasseMyClass
. Es erscheint ein Menü. Ich wähle aus diesem MenüRun As -> Java Application
. Dies ist, wie ich immer ausführen einer Anwendung von Eclipse, so dass ich don ' T sehen was das problem ist.A
ist eine öffentliche abstrakte Klasse in der gleichencom.example.main
Paket undB
ist eine öffentliche Schnittstelle, die incom.example.interface
.com.example.main
sollte es nicht versuchen zu laufenMyClass
werden, sollte er versuchen zu laufencom.example.main.MyClass
. - Bearbeitung...com.example.main.MyClass
. Haben Sie noch andere Ideen, die ich versuchen könnte?MyClass
das ist nicht in einem Paket, durch Zufall?bin
- Verzeichnis (oder wo auch immer Sie geben Sie Ihre class-Dateien)?MyClass.class
Datei incom/example/main
unter Ihrem bin-Verzeichnis?java com.example.main.MyClass
? Können Sie versuchen, entfernen alle anderen Abhängigkeiten (die Klasse, es reicht, das interface implementiert etc) und sehen, ob das hilft?java
Befehl funktioniert nur gut, wenn es das war, was Sie fragten.java com.example.main.MyClass
dann sollte es nicht sagenjava.lang.NoClassDefFoundError: MyClass
- denn das ist, zeigt die packageless Klasse. Wenn Sie könnten, bieten eine kurze aber vollständige Programm und ein copy/paste von dem, was passiert, wenn Sie es ausführen von der Konsole, das würde wirklich helfen, Klarheit zu schaffen.classes
Verzeichnis nichtclasses/com/example/main
. Aus derclasses
Verzeichnis, führen Siejava com.example.main.MyClass
. Es ist nicht klar, warum Sie gesprochen habenGeoDAOImpl
...GeoDAOImpl
ist ein Tippfehler. Tut mir Leid, dass. Nun, was soll ich tun, damit Eclipse erkennt die Klasse?Müssen Sie zuerst kompilieren Sie die Quelldatei, wenn Sie nicht bereits getan haben. Unter der Annahme, dass Ihre Klasse
MyClass
ist nicht in einem Paket, und Sie sind in das Verzeichnis, das enthält die Quell-DateiMyClass.java
kompilieren mit:Sollten Sie nun eine Datei mit dem Namen
MyClass.class
.Dann, es zu starten, müssen Sie sicherstellen, dass das Verzeichnis, das enthält die
MyClass.class
- Datei in den Klassenpfad. Wenn Sie nicht dieCLASSPATH
Umgebungsvariable gesetzt, wird Java standardmäßig zuerst im aktuellen Verzeichnis, so dass Sie sollten in der Lage sein, um es ausführen mit:Wenn dies nicht funktioniert, können Sie explizit das aktuelle Verzeichnis
.
im Klassenpfad der-cp
option:Eclipse Indigo
als IDE, so darf ich nicht kompilieren es selbst. Ich habe ein update gemacht auf die Frage.