5

継承したJava GUIアプリケーションをデバッグしようとしています(EclipseでF11)が、Eclipse IDEの外部でアプリケーションが正常に動作している間(適用する必要がある小さな修正を除く)、Eclipseから起動すると次の例外が生成されます(F11または Ctrl+F11):

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

これに関する私の最初の検索では、dom4j ライブラリが欠落している可能性がありますが、それを pom.xml に追加していることがわかりました。

    <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>

問題を解決しませんでした。

この例外が発生する理由 ( Eclipse から起動した場合のみ) と、この問題を解決する方法について何か考えはありますか?

ところで、saxson依存関係が追加されたのは、最新の dom4jを使用しようとすると、ビルド時に未解決の依存関係が発生したためです。しかし、私はにダウングレードしたdom4j 1.6.1ので、saxon の依存関係を排除できたので、pom.xml ファイルには現在のみが含まれています。

   <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
    </dependencies>
4

2 に答える 2

1

Eclipseの「デバッグ」ビューに移動して、Eclipseがプログラムの実行に使用している実際のコマンドを取得します。プログラムが起動したらすぐに一時停止し、「デバッグ」ビューで2行目を右クリックして、プロパティを選択する必要があります。「プロセスプロパティ」と呼ばれるウィンドウが表示されます。このウィンドウから、Eclipseによって生成されたコマンドをコピーしてプログラムを実行できます。コマンドをターミナルに貼り付けて、Javaがクラスパスをどのように解決するかを確認できます。-verboseパラメーターを追加して、実際にロードされているjarを確認します。

編集-明確にするために、私が「デバッグビュー」と言うとき、私は意味します

"Main Menu"->"Window"->"Show View"->"Debug"
于 2013-03-17T13:20:04.990 に答える