单击JDialog的关闭按钮时出现NullPointerException

时间:2017-02-10 19:05:54

标签: jdialog

我有一个扩展JDialog的类,用于创建一个带有多个文本框的弹出框,供用户输入数据。单击“确定”按钮后,数据将存储到ArrayList中。如果没有数据输入到文本框中,并且用户单击“确定”,则一切正常。我仍然可以访问ArrayList。

我遇到的问题是点击JDialog的关闭按钮。无论文本框(数据或没有数据)发生什么,我在尝试访问ArrayList时都会收到NullPointerException。即使我尝试测试null。

处理此问题的正确方法是什么?是的,我对Java很新。也许我的方法从一开始就错了?

我的主程序调用getData()方法来检索数据。我认为这可能是错的,但是当点击“确定”按钮时它似乎有效。

*编辑以添加代码

public class DataPopup extends JDialog{
    ArrayList<String> data;
    ArrayList<JTextField> dataFields = new ArrayList<JTextField>();

    public DataPopup(Frame parent) {
        super(parent);
        initUI();
    }

    private void initUI() {

        JLabel name = new JLabel("Enter Data");
        name.setFont(new Font("Arial", Font.BOLD, 13));

        JLabel custNameLabel = new JLabel("Customer Name");
        JTextField custNameField = new JTextField();
        dataFields.add(custNameField);

        JLabel serialNumLabel = new JLabel("Serial Number");
        JTextField serialNumField = new JTextField();
        dataFields.add(serialNumField);

        JLabel notesLabel = new JLabel("Notes");
        JTextField notesField = new JTextField();
        dataFields.add(notesField);

        JButton btn = new JButton("OK");
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed (ActionEvent event) {
                data = new ArrayList<String>();

                for(int i = 0; i < dataFields.size(); i++) {
                    data.add(dataFields.get(i).getText());
                }

                dispose();
            }
        });

        createLayout(name, 
                    custNameLabel, 
                    custNameField,  
                    serialNumLabel, 
                    serialNumField, 
                    notesLabel, 
                    notesField, 
                    btn);

        setModalityType(ModalityType.APPLICATION_MODAL);

        setTitle("Information");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setLocationRelativeTo(getParent());
    }


    public ArrayList<String> getData() {
        return data;
    }

    private void createLayout(JComponent... arg) {

        Container pane = getContentPane();
        GroupLayout g1 = new GroupLayout(pane);
        pane.setLayout(g1);

        g1.setAutoCreateContainerGaps(true);
        g1.setAutoCreateGaps(true);

        g1.setHorizontalGroup(g1.createParallelGroup(CENTER)
                .addComponent(arg[0])
                .addComponent(arg[1])
                .addComponent(arg[2])
                .addComponent(arg[3])
                .addComponent(arg[4])
                .addComponent(arg[5])
                .addComponent(arg[6])
                .addComponent(arg[7])
                .addGap(200)
        );

        g1.setVerticalGroup(g1.createSequentialGroup()
                .addGap(30)
                .addComponent(arg[0])
                .addGap(20)
                .addComponent(arg[1])
                .addGap(10)
                .addComponent(arg[2])
                .addGap(20)
                .addComponent(arg[3])
                .addGap(10)
                .addComponent(arg[4])
                .addGap(20)
                .addComponent(arg[5])
                .addGap(10)
                .addComponent(arg[6])
                .addGap(20)
                .addComponent(arg[7])//OK button
                .addGap(30)
        );

        pack();
    }
}

0 个答案:

没有答案