Java 在mattise中加载表单时不执行某些代码

Java 在mattise中加载表单时不执行某些代码,java,swing,netbeans,nullpointerexception,matisse,Java,Swing,Netbeans,Nullpointerexception,Matisse,我在NetBeans的Mattise表单编辑器中设计了一个JPanel。现在,我想将此表单包含在JFrame中。然而,这是失败的,因为在JPanel的构造函数中,它引用了程序中其他地方的静态变量,在表单编辑器中为null,因为它只在加载JFrame之前在程序中的其他地方初始化,所以它产生了NullPointerException public UserManagementPanel() { initComponents(); loadUserRequest(); } priva

我在NetBeans的Mattise表单编辑器中设计了一个JPanel。现在,我想将此表单包含在JFrame中。然而,这是失败的,因为在JPanel的构造函数中,它引用了程序中其他地方的静态变量,在表单编辑器中为
null
,因为它只在加载JFrame之前在程序中的其他地方初始化,所以它产生了
NullPointerException

public UserManagementPanel() {
    initComponents();
    loadUserRequest();
}

private void loadUserRequest() {
    GetUserListRequest req = new GetUserListRequest();
    req.setListener(this);
    transcription.Main.cq.addRequest(req);
}
调用
transcription.Main.cq.addRequest
时失败,因为它未初始化

java.lang.NullPointerException
at transcription.users.UserManagementPanel.loadUserRequest(UserManagementPanel.java:28)
at transcription.users.UserManagementPanel.<init>(UserManagementPanel.java:22)
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:408)
at java.lang.Class.newInstance(Class.java:433)
at org.netbeans.modules.form.CreationFactory.createDefaultInstance(CreationFactory.java:178)
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.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.openide.util.Mutex.doEventAccess(Mutex.java:1376)
at org.openide.util.Mutex.readAccess(Mutex.java:327)
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:467)
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:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
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)
java.lang.NullPointerException
在transcription.users.UserManagementPanel.loadUserRequest(UserManagementPanel.java:28)中
在transcription.users.UserManagementPanel。(UserManagementPanel.java:22)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:408)
位于java.lang.Class.newInstance(Class.java:433)
位于org.netbeans.modules.form.CreationFactory.createDefaultInstance(CreationFactory.java:178)
位于org.netbeans.modules.form.RADComponent.createBeanInstance(RADComponent.java:252)
位于org.netbeans.modules.form.RADComponent.initInstance(RADComponent.java:191)
位于org.netbeans.modules.form.GandalPersistenceManager.restoreComponent(GandalPersistenceManager.java:780)
位于org.netbeans.modules.form.GandalPersistenceManager.loadComponent(GandalPersistenceManager.java:968)
位于org.netbeans.modules.form.GandalPersistenceManager.restoreComponent(GandalPersistenceManager.java:824)
位于org.netbeans.modules.form.GandalPersistenceManager.loadComponent(GandalPersistenceManager.java:968)
位于org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:503)
位于org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:283)
位于org.netbeans.modules.form.FormEditor$2.run(FormEditor.java:352)
位于org.netbeans.modules.form.FormLAF$2.run(FormLAF.java:293)
位于org.openide.util.Mutex.doEventAccess(Mutex.java:1376)
位于org.openide.util.Mutex.readAccess(Mutex.java:327)
在org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:276)上
位于org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:349)
在org.netbeans.modules.nbform.FormEditorSupport.loadOpeningForm(FormEditorSupport.java:467)
位于org.netbeans.modules.nbform.FormDesignerTC.loadForm(FormDesignerTC.java:279)
在org.netbeans.modules.nbform.FormDesignerTC.access$300(FormDesignerTC.java:87)
在org.netbeans.modules.nbform.FormDesignerTC$preload任务$1.run(FormDesignerTC.java:268)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)中
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
在java.awt.EventQueue.access$400(EventQueue.java:97)
位于java.awt.EventQueue$3.run(EventQueue.java:697)
位于java.awt.EventQueue$3.run(EventQueue.java:691)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
位于org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)中
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:105)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

这段代码对于表单编辑器并不重要——我只需要在实际程序中运行这段代码。有什么方法可以让表单编辑器在初始化时忽略该代码吗?

最后,我做了一个简单的解决方法-我捕获并忽略了NullPointerException:

private void loadUserRequest() {
    GetUserListRequest req = new GetUserListRequest();
    req.setListener(this);
    try {
        transcription.Main.cq.addRequest(req);
    } catch (NullPointerException e) {}
}

这不是一个完美的解决方案,因为在实际的程序执行过程中,如果出于某种原因cq实际上是
null
,那么我希望它抛出一个异常,所以我很好奇是否有其他人有更优雅的解决方案。

对于GUI,静态通常是错误的选择。为了更快地获得更好的帮助,请发布一个(最小的完整可验证示例)。@AndrewThompson奇怪,我根据自己的情况假设是马蒂斯在运行构造函数。但是现在我试着做一个MCVE,它没有运行构造函数,也没有出现错误。为什么它有时运行构造函数,有时不运行?我没有花时间去理解Matisse逻辑。我花时间去理解Java,似乎调用构造函数是因为我对一些组件做了一些绑定,但即使这样也不一致,有时我会出错,有时不会。