Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java basic GUI程序收到此错误“;AWT-EventQueue-0“;java.lang.NullPointerException“;_Java_Swing_Nullpointerexception_Awt_Event Dispatch Thread - Fatal编程技术网

Java basic GUI程序收到此错误“;AWT-EventQueue-0“;java.lang.NullPointerException“;

Java basic GUI程序收到此错误“;AWT-EventQueue-0“;java.lang.NullPointerException“;,java,swing,nullpointerexception,awt,event-dispatch-thread,Java,Swing,Nullpointerexception,Awt,Event Dispatch Thread,我正在尝试构建一个简单的gui程序。一切都很顺利,因为我在添加一些GUI组件(如SWING和AWT)之前测试了这些类。然而,当我尝试一些输入,并按下提交按钮,它给了我这个错误 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at com.simpleAccountEntry.SimpleAccountListener.actionPerformed(SimpleAccountL

我正在尝试构建一个简单的gui程序。一切都很顺利,因为我在添加一些GUI组件(如SWING和AWT)之前测试了这些类。然而,当我尝试一些输入,并按下提交按钮,它给了我这个错误

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at com.simpleAccountEntry.SimpleAccountListener.actionPerformed(SimpleAccountListener.java:15)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6389)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3268)
    at java.awt.Component.processEvent(Component.java:6154)
    at java.awt.Container.processEvent(Container.java:2045)
    at java.awt.Component.dispatchEventImpl(Component.java:4750)
    at java.awt.Container.dispatchEventImpl(Container.java:2103)
    at java.awt.Component.dispatchEvent(Component.java:4576)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4633)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4297)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4227)
    at java.awt.Container.dispatchEventImpl(Container.java:2089)
    at java.awt.Window.dispatchEventImpl(Window.java:2518)
    at java.awt.Component.dispatchEvent(Component.java:4576)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:672)
    at java.awt.EventQueue.access$400(EventQueue.java:96)
    at java.awt.EventQueue$2.run(EventQueue.java:631)
    at java.awt.EventQueue$2.run(EventQueue.java:629)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
    at java.awt.EventQueue$3.run(EventQueue.java:645)
    at java.awt.EventQueue$3.run(EventQueue.java:643)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:642)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
我从昨天开始试着调试它,但我找不到哪里出错了。我试图检查此错误代码:

 com.simpleAccountEntry.SimpleAccountListener.actionPerformed(SimpleAccountListener.java:15)
它指向这个类:

public class SimpleAccountListener implements ActionListener{

    private SimpleAccountActionsPanel listen;
    
    public SimpleAccountListener(SimpleAccountActionsPanel functionPanel){
        listen = functionPanel;
    }
    
    public void actionPerformed(ActionEvent e){
        listen.recordPatient(); //SimpleAccountListener.java: 15
    }
}
可以在这个类中找到listen.recordPatient()以及我编写的其他方法

编辑
公共类SimpleCountActionSpanel扩展了JPanel{
私有SimpleAccountPanel帐户=新SimpleAccountPanel();
**//初始化此行
静态私有SimpleAccountActionsPanel perform=new SimpleAccountActionsPanel()**
private DetailsEntry setPatient=new DetailsEntry();
静态私有JButton提交;
静态私有JButton删除;
公共SimpleCountActionSpanel(){
这个.setLayout(新的GridLayout(1,2));
提交=新按钮(“提交条目”);
delete=新的JButton(“删除条目”);
提交。挫折背景(颜色:深灰色);
提交。设置前景(颜色为橙色);
删除背景(颜色:深灰色);
删除。设置前景(颜色为橙色);
本.添加(提交);
本条增加(删除);
//SimpleAccountPanel varFields=新的SimpleAccountPanel();
SimpleAccountListener performFn=新的SimpleAccountListener(执行);
submit.addActionListener(performFn);
}
公众人士(病人){
字符串名称=account.getEnterName().getText();
字符串dob=account.getEnterDOB().getText();
字符串doc=account.getEnterDr().getText();
字符串allergy=account.getAllergies().getText();
String room=account.getEnterRoomNo().getText();
int convRoom=Integer.parseInt(房间);
setPatient.addEntry(新的详细信息(姓名、出生日期、医生、过敏、康复室));
}
}
有人愿意帮我吗?如果你需要更多的我实现的类,我可以发布它只是让我知道提前感谢

编辑
多亏了Max和MadProgrammer,我初始化的perform as Suggestive程序现在工作得很好。

您正在传递
SimpleAccountListener
变量
perform
的引用,该变量未在
SimpleAccountActionsPanel
的构造函数中初始化,因此NPE

SimpleAccountListener performFn = new SimpleAccountListener(perform); // <-- perform is not initialised...

您有以下声明:

private SimpleAccountActionsPanel perform;

但是
perform
从未初始化,它是null,因此
NullPointerException
。您正在将其传递给
SimpleAccountListener

您好,感谢MadProgrammer回答我现在已初始化执行添加此代码SimpleAccountListener执行=新建SimpleAccountListener();添加并运行程序后,我再也找不到提交按钮。即使我最大化了整个GUI。对此有什么想法吗?首先,我不会让按钮从静态开始。我还是从Java开始,对在程序中使用一些关键字还没有信心。但我下次会这么做。关于按钮是静态的,我在开始编码时就想尝试在其他类上使用这些按钮,这就是为什么我将其声明为静态的原因。不用担心,正如Max所指出的,UI组件只能属于一个容器,所以这会让您陷入困境;)嗨,麦克斯,谢谢你的回答。我尝试了你的两个建议,但是当我初始化执行并运行程序时,我找不到我的提交按钮,即使我最大化了整个GUI程序。该组件只能添加到一个容器中。因此,可能按钮被添加到面板的第二个实例中。请注意,代码中的按钮是静态的。另外,为什么不使用
这个
来初始化
SimpleAccountListener
?明白了,现在它显示我在初始化执行时添加了静态。你们真了不起。
SimpleAccountListener performFn = new SimpleAccountListener(this);
private SimpleAccountActionsPanel perform;