Java Swing gui设计器按钮单击引发错误

Java Swing gui设计器按钮单击引发错误,java,swing,Java,Swing,我正在使用JavaSwing设计一个应用程序,我正在尝试让它在点击一个按钮时,4个文本字段的内容被添加到一个数组列表中,并传递给一个方法来存储在mysql中。在寻找我问题的答案后,我发现:我似乎做了所有正确的事情,但仍然不起作用 gui按钮和字段: ID = new JTextField(); ID.setBounds(20, 36, 46, 20); panel.add(ID); ID.setColumns(10); email = new JText

我正在使用JavaSwing设计一个应用程序,我正在尝试让它在点击一个按钮时,4个文本字段的内容被添加到一个数组列表中,并传递给一个方法来存储在mysql中。在寻找我问题的答案后,我发现:我似乎做了所有正确的事情,但仍然不起作用

gui按钮和字段:

    ID = new JTextField();
    ID.setBounds(20, 36, 46, 20);
    panel.add(ID);
    ID.setColumns(10);

    email = new JTextField();
    email.setBounds(191, 36, 109, 20);
    panel.add(email);
    email.setColumns(10);

    pass = new JTextField();
    pass.setBounds(319, 36, 96, 20);
    panel.add(pass);
    pass.setColumns(10);

    name = new JTextField();
    name.setColumns(10);
    name.setBounds(86, 36, 86, 20);
    panel.add(name);

    JButton btnadd = new JButton("Add");
    btnadd.addActionListener(new ActionListener() {
        public List<String> user_array;

        @Override
        public void actionPerformed(ActionEvent e) {

            if (!ID.getText().trim().equals("")){
                user_array.add(ID.getText().trim());
            }
            if (!email.getText().trim().equals("")){
                user_array.add(email.getText().trim());
            }
            if (!pass.getText().trim().equals("")){
                user_array.add(pass.getText().trim());
            }
            if (!name.getText().trim().equals("")){
                user_array.add(name.getText().trim());
            }
            //make these depend on wether array is filled
            if(!user_array.isEmpty())
            {
                String[] user = user_array.toArray(new String[5]);
                Lottery.employees.addEmployeeMysql(user);
            }
        }
    });
    btnadd.setBounds(404, 222, 56, 23);
    panel.add(btnadd);
但我仍在研究mysql,我试图对它进行测试

这就是我得到的错误:(指向
user\u array.add(ID.getText().trim());


您获得
NullPointerException
的最可能原因是您没有初始化按钮
ActionListener
中的列表

btnadd.addActionListener(new ActionListener() {
    public List<String> user_array;
    @Override
    public void actionPerformed(ActionEvent e) {...}
btnadd.addActionListener(新ActionListener(){
公共列表用户_数组;
@凌驾
已执行的公共无效操作(操作事件e){…}
这里,而不是

public List<String> user_array;
公共列表用户\u数组;
使用

public List user_array=new ArrayList();

这似乎已经做到了,但eclipse纠正了它,因为“只允许最终”这正常吗?是的,这是正常的,从JLS-
任何在内部类中使用但未声明的局部变量必须在内部类的主体之前明确赋值。
btnadd.addActionListener(new ActionListener() {
    public List<String> user_array;
    @Override
    public void actionPerformed(ActionEvent e) {...}
public List<String> user_array;
public List<String> user_array = new ArrayList<String>();