2013-03-04 22 views
5

Tôi đang cố gắng gỡ rối (F11 trên Eclipse) một ứng dụng GUI Java mà tôi thừa kế nhưng trong khi ứng dụng chạy tốt (trừ một sửa chữa nhỏ mà tôi cần áp dụng) bên ngoài IDE Eclipse, nó tạo ra ngoại lệ sau khi phóng từ Eclipse (hoặc F11 hoặc Ctrl + 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 

tìm kiếm ban đầu của tôi về vấn đề này phát hiện ra rằng the dom4j library may be missing nhưng thêm nó vào 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> 

Did không giải quyết t anh ta có vấn đề.

Bất kỳ ý tưởng nào tại sao tôi nhận ngoại lệ này (chỉ khi khởi chạy từ Eclipse) và cách giải quyết vấn đề này?

BTW, phụ thuộc saxson chỉ được thêm vào vì cố gắng sử dụng the latest dom4j dẫn đến phụ thuộc chưa được giải quyết khi xây dựng. Nhưng kể từ khi tôi hạ cấp xuống dom4j 1.6.1 tôi có thể loại bỏ sự phụ thuộc saxon để các tập tin pom.xml chỉ chứa bây giờ:

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

Đây có phải là dự án maven m2e hoặc dự án java đơn giản trong nhật thực không? – anoopelias

+0

@anoopelias Vâng, nó * là * một dự án m2e Maven. Nó có ** không có ** vấn đề tải về sự phụ thuộc và xây dựng với nó. Kỳ dị. – Withheld

+0

Nếu bạn có một số phụ thuộc khác, bạn có thể thử thay đổi thứ tự xuất trong nhật thực. Di chuyển dom4j lên danh sách để bạn không có phụ thuộc khác bao gồm phiên bản cũ hơn của Dom4j. – jontejj

Trả lời

1

Tôi sẽ đi đến Eclipse "debug" xem và nhận được lệnh thực tế rằng Eclipse được sử dụng để chạy chương trình của bạn. Bạn nên tạm dừng chương trình ngay sau khi chương trình bắt đầu, sau đó nhấp chuột phải vào dòng SECOND trong chế độ xem "gỡ lỗi", sau đó chọn thuộc tính. Bạn sẽ thấy một cửa sổ được gọi là "các thuộc tính quy trình" từ đó có thể sao chép lệnh do Eclipse tạo ra để chạy chương trình của bạn. Bạn có thể dán lệnh vào một thiết bị đầu cuối và sau đó xem cách Java giải quyết đường dẫn lớp. Xem lọ nào thực sự được nạp bằng cách thêm tham số -verbose.

EDIT - Chỉ cần để làm cho nó rõ ràng, khi tôi nói "debug xem" Ý tôi là

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

Bro, bạn cần phải nhập khẩu tất cả các file jar để chạy program.These của bạn là bắt buộc để chạy dự án của bạn

Poi-3.10-Final.jar

Poi-OOXML-3.10-Final.jar

Poi-OOXML-schemas-3.10.jar

Xmlbeans-2.30.jar