2012-12-06 30 views
2

我的文本文件包含數據爲:sample.txt的
MEMHEAD 1 1 NA的SetString srcCode顯示從文本文件數據的JTable

MEMHEAD 1 2 NA的SetString memIdnum

LGLNAME 1 5 NA的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); 
} 

,但不知道什麼是problem.Please幫助。

+0

help請。 :( – Nidhi

回答

2

您正在將數據添加到Vectors而無需初始化它們。

Vector data; 
Vector columns; 

在添加元素之前對它們進行初始化。

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

檢查後,不管你是否得到NullPointerException或不。

如果你仍然得到NPE那麼我懷疑你沒有初始化JTable。因此,發佈代碼以使我們知道哪裏會發生異常。

+1

是啊..這是問題,現在它的工作正常,謝謝。:) – Nidhi

+2

+1多好看你回答... – mKorbel

+0

@mKorbel哈哈。感謝您記住我。我這些日子的日程安排非常緊張,所以我只是提出問題來解決我的問題。但現在我已經適應了這種環境。現在我很高興,但仍然努力工作。 – Amarnath

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" });