java - 不知道为什么我的 gui 应用程序出现 nullpointerException

标签 java swing nullpointerexception

当我在 actionListener 内的任何文本字段上调用 ​​getText() 时,它会不断抛出空指针错误。我已经这样做了十几次了,我一定是脑子放屁了。

  import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.concurrent.ExecutionException;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTabbedPane;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    import javax.swing.SwingWorker;

public class Addressbook {
    private JTextField firstName;
    private JTextField lastName;
    private JTextField number;
    private JTextField address;
    private JTextField zipcode;
    private ConnectDB db;

    public void buildGui() {
        JFrame frame = new JFrame("hakob AddressBook");
        JTabbedPane tabs = new JTabbedPane();
        JPanel mainPanel = new JPanel();
        mainPanel.add(tabs);

        JPanel addContact = new JPanel(new GridLayout(3, 2));
        JTextField firstName = new JTextField("first name", 9);
        lastName = new JTextField("last name", 10);
        number = new JTextField("number", 9);
        address = new JTextField("address", 15);
        zipcode = new JTextField("zipcode", 5);
        JButton addButton = new JButton("add contact");
        addButton.addActionListener(new addListener());
        addContact.add(firstName);
        addContact.add(lastName);
        addContact.add(number);
        addContact.add(address);
        addContact.add(zipcode);
        addContact.add(addButton);

        JPanel editContact = new JPanel();
        // select contact
        // make changes
        // submit changes

        JPanel viewContacts = new JPanel();
        // table show contacts
        // sort contacts
        // edit?
        tabs.addTab("add new contact", addContact);
        tabs.addTab("edit contact", editContact);
        tabs.addTab("view contacts", viewContacts);
        frame.add(mainPanel, BorderLayout.CENTER);
        frame.setSize(450, 630);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // frame.pack();

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Addressbook().buildGui();
            }
        });
    }

    public class addListener implements ActionListener {
        public void actionPerformed(ActionEvent ev) {
            new SwingWorker<Person, Void>() {
                @Override
                protected Person doInBackground() throws Exception {
                    System.out.println("adding");
                    Person person = new Person(firstName.getText(),
                            lastName.getText(), (Integer.parseInt(number
                                    .getText())), address.getText(),
                            (Integer.parseInt(zipcode.getText())));
                    System.out.println(person);
                    clearText();
                    return person;
                }

                @Override
                protected void done() {
                    try {
                        db.add(get());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                        System.out.println("interupt");
                    } catch (ExecutionException e) {
                        e.printStackTrace();
                        System.out.println("execution exc");
                    }
                    System.out.println("done");
                }
            }.execute();
        }
    }

    public void clearText() {
        firstName.setText("");
        lastName.setText("");
        number.setText("");
        address.setText("");
        zipcode.setText("");
    }
}

错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Addressbook.clearText(Addressbook.java:105)
    at Addressbook$addListener$1.done(Addressbook.java:98)
    at javax.swing.SwingWorker$5.run(Unknown Source)
    at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(Unknown Source)
    at sun.swing.AccumulativeRunnable.run(Unknown Source)
    at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(Unknown Source)
    at javax.swing.Timer.fireActionPerformed(Unknown Source)
    at javax.swing.Timer$DoPostEvent.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

当我尝试显式创建一个人对象时,它工作得很好,但如果我从文本字段中获取文本,则效果不佳

最佳答案

当您在 buildGui 方法中执行此操作时,您将隐藏类属性:

JTextField firstName = new JTextField("first name", 9);

因此您的属性 firstName 未初始化并保持为 null。将其更改为:

firstName = new JTextField("first name", 9);

关于java - 不知道为什么我的 gui 应用程序出现 nullpointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531006/

相关文章:

java - 在线程 "main"java.lang.Error : Unresolved compilation: at FileTest. main(FileTest.java:39) 中获取异常

java正则表达式分割模式

java - NullPointerException 和 BufferedReader

java - 过滤 JComboBox

Java:showInputDialog 中的自定义按钮

java - 什么是NullPointerException,我该如何解决?

java - 在 NavigationView 中获取 NullPointerException

java - 如何在 Java 项目中查找 jUnit 测试?

Ant + Vista 64 : "Unable to locate tools.jar" (jre/jdk conflict? )

java - 如何使用 GUI - 使用 PaintComponent() 初始化 GUI,然后添加基于鼠标的 GUI