2013-10-09 36 views
1

本程序将更新一次,我可以进入并更改表格中的内容并点击更新。我可以更新,只要我不退出程序,一旦我再次运行程序,我注意到它保存了我更改的单元格,但它也添加了一行空白单元格。我试图再次更新一些更改它对我的错误:异常在线程“AWT-EventQueue-0”java.lang.NullPointerException错误,该怎么办?

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at java.io.Writer.write(Writer.java:157) 
    at testaddress.Testaddress$3.actionPerformed(Testaddress.java:267) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6505) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3312) 
    at java.awt.Component.processEvent(Component.java:6270) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4861) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
    at java.awt.Container.dispatchEventImpl(Container.java:2273) 
    at java.awt.Window.dispatchEventImpl(Window.java:2719) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:694) 
    at java.awt.EventQueue$3.run(EventQueue.java:692) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:708) 
    at java.awt.EventQueue$4.run(EventQueue.java:706) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

它也抹我的整个信息文件,留下一个空白的txt文件。 继承人的代码:

update.addActionListener(new ActionListener() { 


    @Override 
    public void actionPerformed(ActionEvent e) { 
    try{ 
     BufferedWriter bfw = new BufferedWriter(new FileWriter(tmp)); 
     for (int i = 0 ; i < table.getRowCount(); i++) 
     { 
      bfw.newLine(); 
      for(int j = 0 ; j < table.getColumnCount();j++) 
      { 
       bfw.write((String)(table.getValueAt(i,j))); 
       bfw.write("\t"); 
      } 
     } 
     bfw.close(); 
    } catch(IOException ea) { 
     System.out.println(
     "Input/Output Exception occurred: " + 
     ea.getMessage()); 
    } 
}}); 

这里是代码的其余部分:

package testaddress; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener;; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.Scanner; 
import javax.swing.table.DefaultTableModel; 



public class Testaddress extends JFrame { 
    public static JTable table; 
    public static DefaultTableModel model; 
    public static JButton update; 
    public static File tmp; 

    public static void MyAddressBook(Container pane) throws FileNotFoundException, IOException{ 

     JLabel Name; 
     pane.setLayout(new GridBagLayout()); 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 

     Name = new JLabel("Name:"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 0; 
     gbc.gridy = 0; 
     gbc.anchor = GridBagConstraints.NORTH;  
     pane.add(Name, gbc); 

     final JTextField textName = new JTextField(); 
     gbc.weightx = 0.5; 
     gbc.gridx = 1; 
     gbc.gridy = 0; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(textName, gbc); 

     JLabel HPhone = new JLabel("Home Phone #:"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 2; 
     gbc.gridy = 0; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(HPhone, gbc); 

     final JTextField textHPhone = new JTextField(); 
     gbc.weightx = 0.5; 
     gbc.gridx = 3; 
     gbc.gridy = 0; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(textHPhone, gbc); 

     JLabel CellPhone = new JLabel("Cell Phone #:"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(CellPhone, gbc); 

     final JTextField textCPhone = new JTextField(); 
     gbc.weightx = 0.5; 
     gbc.gridx = 1; 
     gbc.gridy = 1; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(textCPhone, gbc); 

     JLabel Address = new JLabel("Address"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 2; 
     gbc.gridy = 1; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(Address, gbc); 

     final JTextField textAddress = new JTextField(); 
     gbc.weightx = 0.5; 
     gbc.gridx = 3; 
     gbc.gridy = 1; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(textAddress, gbc); 

     JLabel City = new JLabel("City:"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 0; 
     gbc.gridy = 2; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(City, gbc); 

     final JTextField textCity = new JTextField(); 
     gbc.weightx = 0.5; 
     gbc.gridx = 1; 
     gbc.gridy = 2; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(textCity, gbc); 

     JLabel State = new JLabel("State:"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 2; 
     gbc.gridy = 2; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(State, gbc); 

     final JTextField textState = new JTextField(); 
     gbc.weightx = 0.5; 
     gbc.gridx = 3; 
     gbc.gridy = 2; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(textState, gbc); 

     JLabel Zip = new JLabel("Zipcode:"); 
     gbc.weighty = 0.1; 
     gbc.weightx = 0.5; 
     gbc.gridx = 0; 
     gbc.gridy = 3; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(Zip, gbc); 

     final JTextField textZip = new JTextField(); 
     gbc.weighty = 0.1; 
     gbc.weightx = 0.5; 
     gbc.gridx = 1; 
     gbc.gridy = 3; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(textZip, gbc); 

     JLabel Country = new JLabel("Country:"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 2; 
     gbc.gridy = 3; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(Country, gbc); 

     final JTextField textCountry = new JTextField(); 
     gbc.weighty = 0.1; 
     gbc.weightx = 0.5; 
     gbc.gridx = 3; 
     gbc.gridy = 3; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(textCountry, gbc); 

     update = new JButton("Update"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 1; 
     gbc.gridy = 5; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(update, gbc); 

     JButton exit = new JButton("Exit"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 3; 
     gbc.gridy = 5; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(exit, gbc); 

     exit.addActionListener(new ActionListener() 
    { 
    public void actionPerformed(ActionEvent e) 
    { 
    if (JOptionPane.showConfirmDialog(null, "Do you really want to quit?", "Quit", 
    JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) 
    { 
    System.exit(0); 
    } 
    } 
    }); 

     JButton save = new JButton("Save"); 
     gbc.weightx = 0.5; 
     gbc.gridx = 2; 
     gbc.gridy = 5; 
     gbc.anchor = GridBagConstraints.NORTH; 
     pane.add(save, gbc); 

     JSeparator sep = new JSeparator(); 
     sep.setPreferredSize(new Dimension(5,1)); 
     gbc.weighty = 0.2; 
     gbc.weightx = 0.5; 
     gbc.gridx = 0; 
     gbc.gridy = 7; 
     gbc.gridwidth = 5; 
     gbc.anchor = GridBagConstraints.CENTER; 
     pane.add(sep, gbc); 

    File fold = new File(System.getProperty("user.home") 
      + "/.MyAddressBook"); 
    if(!fold.exists()){  
    fold.mkdir(); 
    } 
    tmp = new File(System.getProperty("user.home") + 
      "/.MyAddressBook/MyAddressBook.txt"); 
    if(!tmp.exists()){ 
    tmp.createNewFile(); 
    } 


    table = new JTable(); 
    JScrollPane scroll = new JScrollPane(table); 
    String[] colNames = { "Name:", "Home Phone #:", "Cell Phone #:", "Address", 
      "City:", "State:", "Zip Code:", "Country:"}; 
    model = new DefaultTableModel(colNames, 0); 
    final FileInputStream is; 
    is = new FileInputStream(tmp); 
    InsertData(is); 
    gbc.weighty = 1; 
    gbc.weightx = 0.5; 
    gbc.gridx = 0; 
    gbc.gridy = 8; 
    gbc.gridwidth = 4; 
    gbc.gridheight = 9; 
    gbc.anchor = GridBagConstraints.CENTER; 
    pane.add(new JScrollPane(table), gbc); 

    save.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
    BufferedWriter writer; 
    try { 
    writer = new BufferedWriter(new FileWriter(tmp,true)); 
    writer.write(textName.getText() + "\t" + textHPhone.getText() 
    + "\t" + textCPhone.getText() + "\t" + textAddress.getText() + "\t" 
    + textCity.getText() + "\t" + textState.getText() + "\t" + 
    textZip.getText() + "\t" + textCountry.getText()); 
    writer.newLine(); 
    writer.close(); 
    } catch(FileNotFoundException ex) { 
    } catch (IOException ex) { 
    } 
    Scanner scan = new Scanner(is); 
    String[] array; 
    while (scan.hasNextLine()) { 
     String line = scan.nextLine(); 
     if(line.indexOf("\t")>-1) 
      array = line.split("\t"); 
     else 
      array = line.split("\t"); 
     Object[] data = new Object[array.length]; 
     for (int i = 0; i < array.length; i++) 
      data[i] = array[i]; 
     model.addRow(data); 
    } 
    table.setModel(model); 
    }}); 

    update.addActionListener(new ActionListener() { 


    @Override 
    public void actionPerformed(ActionEvent e) { 
    try{ 
    BufferedWriter bfw = new BufferedWriter(new FileWriter(tmp)); 
    for (int i = 0 ; i < table.getRowCount(); i++) 
    { 
    bfw.newLine(); 
    for(int j = 0 ; j < table.getColumnCount();j++) 
    { 
    bfw.write((String)(table.getValueAt(i,j))); 
    bfw.write("\t");; 
    } 
    } 
    bfw.close(); 
     } catch(IOException ea) { 
     System.out.println(
     "Input/Output Exception occurred: " + 
     ea.getMessage()); 
    } 
    }}); 

    } 


public static void InsertData(FileInputStream is){ 
    Scanner scan = new Scanner(is); 
    String[] array; 
    while (scan.hasNextLine()) { 
     String line = scan.nextLine(); 
     if(line.indexOf(",")>-1) 
      array = line.split(","); 
     else 
      array = line.split("\t"); 
     Object[] data = new Object[array.length]; 
     System.arraycopy(array, 0, data, 0, array.length); 
     model.addRow(data); 
    } 
    table.setModel(model); 


} 



    public static void main(String[] args) throws FileNotFoundException, IOException { 
     JFrame frame = new Testaddress(); 
     frame.setTitle("My Address Book"); 
     frame.setSize(900, 600); 
     frame.setResizable(false); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     MyAddressBook(frame.getContentPane()); 
     frame.setVisible(true); 
    } 
} 

是什么原因造成线路267为空,我该如何解决这一问题?

+0

真???,没有人知道什么在你的代码的其余部分,在文件中,也没有在JTable中,这种形式的问题不交代, – mKorbel

+1

什么是你的'Testaddress.java'文件的行** 267 **?更好地发布整个方法。 –

回答

1

Testadress.java中的哪一行是267? 我敢打赌,竟被它是这样的:

bfw.write((String)(table.getValueAt(i,j))); 

所以我想回报table.getValueAt(i,j)null演员将带来NullPointerException

但没有关于yoour代码的知识,这是不可能的帮助。

更新

您覆盖完整的文件。如果你想添加你必须pass true as second parameter

new FileWriter(tmp, true); 
相关问题