我需要用静态二维数组填充 JTable。我为以下对象创建了这个模型JTable:
 public class InsertMatToJTable extends AbstractTableModel{
   String titre[] = {"age real", "sex real", "chest real", "resting_blood_pressure real","serum_cholestoral real","fasting_blood_sugar real","resting_electrocardiographic_results real","maximum_heart_rate_achieved real","exercise_induced_angina real","oldpeak real","slope real","number_of_major_vessels real","thal real", "class"};
   String line;
    float mat[][]= new float[270][13];
    float matrice_normalise[][];
    int i = 0,j=0;
    public void InsertMatToJTable()
    {
try {
        FileInputStream fis = new FileInputStream("fichier.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(fis));
            while ((line = br.readLine()) != null) {
                            StringTokenizer st1 = new StringTokenizer(line, " ");
                            while (st1.hasMoreTokens())
                            {mat[i][j]=Float.valueOf(st1.nextToken()).floatValue(); 
                                                        j++;
                           if (st1.hasMoreTokens()!=true)   i++;
                            }      
            }
            br.close();
      }catch(Exception e) {
                    e.printStackTrace();}
      Normalisation norm = new Normalisation(mat);
   // for(i=0;i<270;i++)
    //{for(j=0; j<14;j++)
    //{matrice_normalise[i][j]=norm.mat_normalised[i][j];
    //}
      matrice_normalise=norm.mat_normalised;
    }
 @Override
   public int getRowCount() {
    return 270*13;
  }
 @Override
public int getColumnCount() {
    return 13;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    return  matrice_normalise[rowIndex][columnIndex];
}
public String getColumnName(int columnIndex) {
    return titre[columnIndex];
}
    }
基本上,这段代码从一个文本文件中读取,每行包含 13 个数值,并将它们存储到一个静态矩阵中,然后应用一些称为“规范化”的其他处理。
这里的问题似乎出在“getValueAt”函数中。我每次都有这个错误:
         Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
         at prodm.InsertMatToJTable.getValueAt(InsertMatToJTable.java:62)
首先,我需要知道这段代码是否真的像我认为的那样,将数据存储在矩阵中,就像存储在文本文件中一样。
其次,我真的不知道 getValueAt 函数有什么问题?
另外,我还注意到了一些其他的事情。这部分肯定有问题:
  while ((line = br.readLine()) != null) {
                            StringTokenizer st1 = new StringTokenizer(line, " ");
                            while (st1.hasMoreTokens())
                            {mat[i][j]=Float.valueOf(st1.nextToken()).floatValue(); 
                                                        j++;
                                                       if (j==13) {i++;j=1;}
                            }  
它从文件中读取数据,但没有按应有的方式存储数据。基本上,它引入了一个“转变”,从第二行开始。例如,应该存储在 [1][0] 的是 [1][1],[2][0] 是 [2][2]...等。