当我在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<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)
当我尝试显式创建人物对象时,它工作正常,但如果我从文本字段中抓取文本则不行
答案 0 :(得分:6)
在buildGui
方法中执行此操作时,您隐藏了类属性:
JTextField firstName = new JTextField("first name", 9);
因此,您的属性firstName
未初始化并保持为空。将其更改为:
firstName = new JTextField("first name", 9);