java - 为什么使用 Gui 输入和监听器方法会出现 Null 指针异常?

标签 java swing nullpointerexception actionlistener local-variables

我是 Java 的新手,我试图让用户通过 Gui 输入员工的名字和姓氏,当他们按下提交按钮时,它会激活监听器方法并允许收集输入的值并将其放入系统内存

我的问题是,当我输入名字时,它工作得很好,但当我输入姓氏时,它根本不起作用,我按下提交按钮,整个事情变得疯狂,错误是空指针异常“AWT 事件队列”。我看不出发生这种情况的原因请帮助

这是错误发生的代码

lName = employeeDetails2.getText();  (located closer to the end of the code)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

public class guiEmployee1 extends JFrame
{

    private String  fName;
    private String  lName;
    private String  gender;
    private String  payLevel;
    private String  empIDnumber;
//  private int dPayLevel; 

    JTextField employeeDetails1;
    JTextField employeeDetails2;
    JTextField employeeDetails3;    
    JTextField employeeDetails4;
    JTextField employeeDetails5;

    public guiEmployee1()
    {
        JButton submit;
        JButton b1;

        System.out.println("cabanas");

        JFrame frame = new JFrame();
        employeeDetails1 = new JTextField(10);

        JTextField employeeDetails2;
        employeeDetails2 = new JTextField(10);




        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(320, 75));
        frame.setTitle("Employee Details");

        frame.setLayout(new FlowLayout());

        frame.add(new JLabel("Please enter Employees first Name: "));
        frame.add(employeeDetails1);
        ButtonListenerFirstName listener = new ButtonListenerFirstName();

        frame.add(new JLabel("Please enter Employees Last Name: "));
        frame.add(employeeDetails2);
        ButtonListenerLastName listener1 = new  ButtonListenerLastName();




        b1  = new JButton  ("Submit");

        b1.addActionListener(listener);
        b1.addActionListener(listener1);


        frame.add(b1);
        frame.pack();
        frame.setSize(300,300);
        frame.setVisible(true);



    }


     public class ButtonListenerFirstName implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
             fName = employeeDetails1.getText();
            System.out.println("and This is the employes first name :"+ fName);         
        } 
    }

    public class ButtonListenerLastName implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
             lName = employeeDetails2.getText();
            System.out.println("and This is the employes Last name :"+ lName);      
        } 
    }




    public static Department getDepartment()
    {
        return null;
    }


}


Thanks 

最佳答案

唯一 在该行上为 null 并导致该异常的变量是 employeeDetails2,因此您必须回顾代码以查看是否以及在何处将对象分配给该变量。在执行此操作时,您会看到您在 guiEmployee1 类的构造函数中将一个对象分配给了 employeeDetails2,但紧接着您在构造函数的上方重新声明了该变量。因此,它是本地 employeeDetails2 变量被分配了一个对象,而不是从未初始化的类字段。这称为变量阴影。解决方案是不要在构造函数中重新声明变量。

即:

public guiEmployee1()
{
    JButton submit;
    JButton b1;

    System.out.println("cabanas");

    JFrame frame = new JFrame();
    employeeDetails1 = new JTextField(10);

    //  JTextField employeeDetails2; ***** comment out this line *****
    employeeDetails2 = new JTextField(10);

接下来,您需要重命名您的变量,以便您的代码成为“ self 注释”。换句话说,为什么不给变量起一个像 employeeDetailsX 这样的通用名称,为什么不把它命名为 lastNameField,在它前面的是 firstNameField,然后将“b1”按钮命名为 submitButton?这样在调试您的代码时,您就会确切地知道它应该做什么?

关于java - 为什么使用 Gui 输入和监听器方法会出现 Null 指针异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7783998/

相关文章:

java - 在您的经验中发现了最差的 Java 实践?

java - 检查距中心一定距离内有多少人

java - 创建 JFrame 的正确方法

java - 在二维数组网格中从一个单元格到另一个单元格绘制线条

java - 我收到以下运行时错误。请帮我找出原因

java - Spring 在服务器上运行良好,但在主应用程序上运行不佳

Java图形和JScrollPane中的边框问题

java - 从自定义适配器类刷新 ListView - Android

java - 索引变量字符串参数时出现 NullPointerException

java - 如何使用 java 2D 获取 "feather effect"?