当我在actionListener中的任何文本字段上调用getText()时,它会不断抛出nullpointer错误.我已经这样做了十几次,我必须要有一个大脑放屁.
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() { @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)
当我尝试显式创建一个人物对象时它工作正常,但如果我从文本字段中获取文本则不行