我正在使用 Netbeans 8.2 UI Builder/Designer (Matisse) 并有一些自定义小部件。一个名为 ChoiceTab 的自定义小部件显示一个名为 Choice 的非 UI 对象。当我单击使用 ChoiceTab 的名为 HL7RuleAdd 的类并单击“设计”时,出现以下错误:
ClassDefNotFoundException:
java.lang.NoClassDefFoundError: Could not initialize class com.hcs.orc.datatype.Choice
at com.hcs.orc.detail.ChoiceTab.<init>(ChoiceTab.java:58)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at org.netbeans.modules.form.CreationFactory.createDefaultInstance(CreationFactory.java:180)
at org.netbeans.modules.form.RADComponent.createBeanInstance(RADComponent.java:252)
at org.netbeans.modules.form.RADComponent.initInstance(RADComponent.java:191)
at org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:780)
at org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:968)
at org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:824)
at org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:968)
at org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:824)
at org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:968)
at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:503)
at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:283)
at org.netbeans.modules.form.FormEditor$2.run(FormEditor.java:352)
at org.netbeans.modules.form.FormLAF$2.run(FormLAF.java:293)
at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEventAccess(NbMutexEventProvider.java:138)
at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:98)
at org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:94)
at org.openide.util.Mutex.readAccess(Mutex.java:250)
at org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:276)
at org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:349)
at org.netbeans.modules.nbform.FormEditorSupport.loadOpeningForm(FormEditorSupport.java:461)
at org.netbeans.modules.nbform.FormDesignerTC.loadForm(FormDesignerTC.java:279)
at org.netbeans.modules.nbform.FormDesignerTC.access$300(FormDesignerTC.java:87)
at org.netbeans.modules.nbform.FormDesignerTC$PreLoadTask$1.run(FormDesignerTC.java:268)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
ChoiceTab用在三个不同的地方,都有这个问题,都属于同一个项目。
这很奇怪,因为 com.hcs.orc.datatype.Choice 与上面的 ChoiceTab 和 HL7RuleAdd 在同一个项目中。甚至奇怪的是,Netbeans 在我的代码的一个分支中正常工作,但在另一个分支中却因上述错误而失败。
这是第 58 行和 ChoiceTab 构造函数的开始:
public ChoiceTab() {
initComponents();
DataFieldTraits trait = Choice.getFieldTraits(ORCConstants.DI_CHOICE_MNC, Choice.dinfo.getTraitsS());
正如您在第 58 行看到的,对 Choice 的引用是静态调用,用于获取有关 Choice 的其他信息。
这两个分支并没有太大的不同(最近的分支),所以我撤销了失败分支中的大部分更改,但它并没有解决问题。我查看了 IDE 日志窗口,除了上述错误之外没有发现任何其他内容。
ChoiceTab 已作为容器添加到 Netbeans Designer Palette,但它是否在 Palette 中似乎并没有什么不同。
我也尝试过清理并构建所有项目。它构建没有错误,但在 Netbeans 中继续失败。
ChoiceTab 本身是一个“设计”类,当您单击“设计”按钮时可以正常工作。
此外,尝试删除 Netbeans 缓存并重新启动 Netbeans。这也没有解决问题。
我已经没有想法了,希望有任何帮助。