2013-03-04 8 views
5

Ich versuche zu debuggen (F11 auf Eclipse) eine Java-GUI-Anwendung, die ich geerbt habe, aber während die Anwendung läuft (minus ein kleines Update muss ich anwenden) außerhalb der Eclipse-IDE, produziert es die folgende Ausnahme, wenn sie von eclipse-Start (entweder F11 oder Strg + F11):ClassNotFoundException: org.dom4j.DocumentException

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/dom4j/DocumentException 
    at com.example.myapp.LoginWindow.buildHibernateConfig(LoginWindow.java:178) 
    at com.example.myapp.LoginWindow.actionPerformed(LoginWindow.java:141) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357) 
    at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicRootPaneUI.java:191) 
    at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1639) 
    at javax.swing.JComponent.processKeyBinding(JComponent.java:2859) 
    at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267) 
    at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:216) 
    at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2936) 
    at javax.swing.JComponent.processKeyBindings(JComponent.java:2928) 
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2822) 
    at java.awt.Component.processEvent(Component.java:6074) 
    at java.awt.Container.processEvent(Container.java:2039) 
    at java.awt.Component.dispatchEventImpl(Component.java:4660) 
    at java.awt.Container.dispatchEventImpl(Container.java:2097) 
    at java.awt.Component.dispatchEvent(Component.java:4488) 
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1856) 
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:722) 
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1000) 
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:865) 
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:686) 
    at java.awt.Component.dispatchEventImpl(Component.java:4532) 
    at java.awt.Container.dispatchEventImpl(Container.java:2097) 
    at java.awt.Window.dispatchEventImpl(Window.java:2489) 
    at java.awt.Component.dispatchEvent(Component.java:4488) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668) 
    at java.awt.EventQueue.access$400(EventQueue.java:81) 
    at java.awt.EventQueue$2.run(EventQueue.java:627) 
    at java.awt.EventQueue$2.run(EventQueue.java:625) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
    at java.awt.EventQueue$3.run(EventQueue.java:641) 
    at java.awt.EventQueue$3.run(EventQueue.java:639) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:638) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException 
    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) 
    ... 47 more 

Meine erste Suche auf dieser festgestellt, dass the dom4j library may be missing aber auf die pom.xml Zugabe:

<dependency> 
     <groupId>net.sourceforge.saxon</groupId> 
     <artifactId>saxon</artifactId> 
     <version>9.1.0.8</version> 
    </dependency>   
    <dependency> 
     <groupId>dom4j</groupId> 
     <artifactId>dom4j</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    </dependencies> 

Did nicht lösen t Das Problem.

Irgendeine Idee, warum ich diese Ausnahme (nur beim Start von Eclipse) bekomme und wie man dieses Problem löst? Die saxson-Abhängigkeit wurde nur hinzugefügt, weil der Versuch, the latest dom4j zu verwenden, zu nicht aufgelösten Abhängigkeiten beim Erstellen geführt hat. Aber da ich zu dom4j 1.6.1 herabgestuft konnte ich die sächsische Abhängigkeit beseitigt so die pom.xml Datei erst jetzt enthält:

<dependency> 
     <groupId>dom4j</groupId> 
     <artifactId>dom4j</artifactId> 
     <version>1.6.1</version> 
    </dependency> 
    </dependencies> 
+1

Ist es ein Maven m2e-Projekt oder ein einfaches Java-Projekt in Eclipse? – anoopelias

+0

@anoopelias Ja, es ist * ein Maven m2e Projekt. Es hat ** no ** Probleme, die Abhängigkeit herunterzuladen und damit zu bauen. Seltsam. – Withheld

+0

Wenn Sie mehrere andere Abhängigkeiten haben, können Sie versuchen, die Export-Reihenfolge in Eclipse zu ändern. Verschieben Sie Dom4j in der Liste nach oben, damit Sie keine weitere Abhängigkeit haben, die eine ältere Version von Dom4j enthält. – jontejj

Antwort

1

ich die Eclipse „debug“ Ansicht gehen und den eigentlichen Befehl bekommen, dass Eclipse verwenden zu laufen dein Programm. Sie sollten das Programm unterbrechen, sobald es gestartet wird, dann mit der rechten Maustaste auf die Zeile SECOND in der Ansicht "debug" klicken und dann Eigenschaften wählen. Sie sehen ein Fenster namens "process properties", aus dem der von Eclipse erstellte Befehl zum Ausführen Ihres Programms kopiert werden kann. Sie können den Befehl in ein Terminal einfügen und dann sehen, wie Java den Klassenpfad auflöst. Sehen Sie, welche Gläser tatsächlich geladen werden, indem Sie den Parameter -verbose hinzufügen.

EDIT - Nur um klarzustellen, wenn ich sage „debug Ansicht“ Ich meine

"Main Menu"->"Window"->"Show View"->"Debug" 
2

Bro, müssen Sie alle JAR-Dateien importieren Sie Ihre program.These auszuführen, sind obligatorisch für Ihr Projekt läuft

Poi-3.10-Final.jar

Poi-OOXML-3.10-Final.jar

Poi-OOXML-schemas-3.10.jar

Xmlbeans-2.30.jar