2

私のテキストファイルには次のようなデータが含まれています:sample.txt
MEMHEAD 1 1 NA SetString srcCode

MEMHEAD 1 2 NA SetString memIdnum

LGLNAME 1 5 該当なし SetString onmfirst

MyClassModel次のように拡張するクラスを作成しましAbstractTableModelた:

    public class MyClassModel extends AbstractTableModel 
{

    Vector data;
    Vector columns;
    public MyTableModel() {
            String line;

            try {
                    FileInputStream fis = new FileInputStream("sample.txt");
                    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
                    StringTokenizer st1 = new StringTokenizer(br.readLine(), ",");
                    while (st1.hasMoreTokens())
                           columns.addElement(st1.nextToken());
                    while ((line = br.readLine()) != null) {
                            StringTokenizer st2 = new StringTokenizer(line, ",");
                            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 columns.size();
    }

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

このようにして、ファイルからデータを取得しました。JTableを使用してモデルを作成し、設定すると、 table.setModel(MyTableModel). を取得していNullPointerExceptionます。

続き:

テキスト ファイル データは JTable に表示されていますが、JTable にはジャンク データを含む余分な行も含まれており、それらの行を押すと、 java.lang.ArrayIndexOutOfBoundsException: 180 >= 180この例外がスローされます。しかし、回線に問題があることがわかりました

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

しかし、何が問題なのかわかりません。助けてください。

4

2 に答える 2

2

初期化せずに両方Vectorsにデータを追加しています。

Vector data;
Vector columns;

要素を追加する前にそれらを初期化します。

Vector data = new Vector();
Vector columns = new Vector();

これを行った後、 NullPointerExceptionが発生しているかどうかを確認してください。

それでも取得NPEしている場合は、初期化していないと思いますJTable。したがって、コードを投稿して、例外がどこに来るかを正確に知らせてください。

于 2012-12-06T07:42:08.037 に答える
0

DefaultTableModel を使用して、テキスト ファイルのデータを JTable に追加することもできます。これは、これを行うための簡単で効率的な方法です。

         FileInputStream fis = new FileInputStream("sample.config");
        BufferedReader br1 = new BufferedReader(new InputStreamReader(fis));
        DefaultTableModel dtm= new DefaultTableModel(0,6);  
    // (for each line in file)
    while ((line = br1.readLine()) != null) 
          {
    dtm.addRow(line.split(" ")); 
     }
    br.close();
    dtm.setColumnIdentifiers(new Object[] { "Attribute"," #","Position",         "Transformation","Assignment","Field","Constant" });
于 2012-12-11T04:52:58.667 に答える