2012-01-26 10 views
0

ファイルから文字(および)をカンマで置き換えようとしていますので、以下のコードを使用してデータを入力してください。私はStringTokenizerでファイルを読むことでこれをやろうとしましたが、実装方法を操作しようとしましたが、NullPointerExceptionで動作させることができません。私は、それが指しているオブジェクトを見つけることができないが、私の問題がどこにあるかはわからないことを理解しています。私がこれに何時間も執着しているので、どんな指針も素晴らしいだろう。 StringTokenizerを使って読むことのアイデアは良いですか?それとも良い方法がありますか?生成されるエラーは次のとおりです。ファイルから文字を置換しようとしたときにヌルポインタの例外が発生しました

 
java.lang.NullPointerException 
    at initial.DisplayTableModel.fileImport(DisplayTableModel.java:29) 
    at initial.DisplayTableModel.(DisplayTableModel.java:15) 
    at initial.Display.(Display.java:15) 
    at initial.Display.main(Display.java:27) 
    Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException:/by zero 
    at initial.DisplayTableModel.getRowCount(DisplayTableModel.java:85) 
    at javax.swing.JTable.getRowCount(Unknown Source) 
    at javax.swing.plaf.basic.BasicTableUI.createTableSize(Unknown Source) 
    at javax.swing.plaf.basic.BasicTableUI.getPreferredSize(Unknown Source) 
    at javax.swing.JComponent.getPreferredSize(Unknown Source) 
    at javax.swing.ScrollPaneLayout.layoutContainer(Unknown Source) 
    at java.awt.Container.layout(Unknown Source) 
    at java.awt.Container.doLayout(Unknown Source) 
    at java.awt.Container.validateTree(Unknown Source) 
    at java.awt.Container.validateTree(Unknown Source) 
    at java.awt.Container.validateTree(Unknown Source) 
    at java.awt.Container.validateTree(Unknown Source) 
    at java.awt.Container.validateTree(Unknown Source) 
    at java.awt.Container.validateTree(Unknown Source) 
    at java.awt.Container.validate(Unknown Source) 
    at java.awt.window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$000(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.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.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) 

このモデルには他に2つのクラスがありますが、置換ブラケットセクションがコメントアウトされてもエラーは返されません。

package initial; 

import javax.swing.table.*; 
import java.io.*; 
import java.util.*; 

@SuppressWarnings("serial") 
public class DisplayTableModel extends AbstractTableModel { 
    protected Vector<String> data; 
    protected Vector<String> columnNames; 
    protected String datafile; 

    public DisplayTableModel(String f) { 
     datafile = f; 
     fileImport(); 
    } 

    public void fileImport() { 
     String aLine; 
     data = new Vector<String>(); 
     columnNames = new Vector<String>(); 
     try { 

      FileInputStream fin = new FileInputStream(datafile); 
      BufferedReader br = new BufferedReader(new InputStreamReader(fin)); 

      aLine = br.readLine(); 
      String strReplace = ")"; 

       br.readLine().replaceAll(strReplace, ","); 
       StringTokenizer Yearquote = new StringTokenizer(aLine, ")"); 

       columnNames.addElement(Yearquote.nextToken()); 
       StringTokenizer st1 = new StringTokenizer(br.readLine(), ","); 
       while (st1.hasMoreTokens()) { 

        columnNames.addElement(Yearquote.nextToken()); 
       } 

       // extract data 

      while (aLine != null) { 

       if (aLine.startsWith("\"")) { 
        StringTokenizer addquote = new StringTokenizer(aLine, "\""); 
        data.addElement(addquote.nextToken()); 
        StringTokenizer st2 = new StringTokenizer(addquote 
          .nextToken(), ","); 

        while (st2.hasMoreTokens()) { 

         data.addElement(st2.nextToken()); 
        } 
       } else { 
        StringTokenizer st2 = new StringTokenizer(aLine, ","); 

        while (st2.hasMoreTokens()) { 

         data.addElement(st2.nextToken()); 
        } 
       } 

      } 

      br.close(); 
     } 

     catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    public int getRowCount() { 
     return data.size()/getColumnCount(); 
    } 

    public int getColumnCount() { 
     return columnNames.size(); 
    } 

    public String getColumnName(int columnIndex) { 
     String colName = ""; 

     if (columnIndex <= getColumnCount()) { 
      colName = columnNames.elementAt(columnIndex); 
     } 
     return colName; 

    } 

    public Class<String> getColumnClass(int columnIndex) { 
     return String.class; 
    } 

    public boolean isCellEditable(int rowIndex, int columnIndex) { 
     return true; 
    } 

    public Object getValueAt(int rowIndex, int columnIndex) { 
     return data.elementAt((rowIndex * getColumnCount()) + columnIndex); 
    } 

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 
     return; 
    } 

} 

答えて

1

行番号(スタックトレースの29行目)は大きなヒントです。おそらく、br.readline().replaceAll()は、br.readline()を2回連続して呼び出しているときにnullポインタを引き起こしています。ストリームにコンテンツがあることを確認せずに、ストリームを使い果たした後に2番目の呼び出しが発生する可能性があります。

0

周り

while ((aLine = br.readLine()) != null) { 
      aLine.replaceAll(strReplace, ","); 
      //logic here 
     } 
+0

Mmmm ...これはうまくいきません。コンパイルされていない場合もあります。例; o) – Laf

1

あなたはまた、ラインreturn data.size()/getColumnCount();には注意する必要がありますあなたのコードをラップ。

Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException:/by zero 
at initial.DisplayTableModel.getRowCount(DisplayTableModel.java:85) 
at javax.swing.JTable.getRowCount(Unknown Source) 
関連する問題