Java 以稍微不同的方式将数据显示到jtable中

Java 以稍微不同的方式将数据显示到jtable中,java,swing,file,jtable,Java,Swing,File,Jtable,我有一个代码,可以读取文件并存储在arraylist中,然后转换为array(用于表模型) 我的类正确地扩展了abstracttablemodel 我的全部代码是: import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.swing.table.Abstr

我有一个代码,可以读取文件并存储在arraylist中,然后转换为array(用于表模型)

我的类正确地扩展了abstracttablemodel

我的全部代码是:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class ReadFileToList extends AbstractTableModel{
String[] col={"Fname","Lname","Number"};
List<String> data=new ArrayList<String>();
String[][] Arraydata;

public ReadFileToList(){
try{
FileReader fr=new FileReader("D:\\AllUserRecords.txt");
BufferedReader br=new BufferedReader(fr);
String line;
while((line=br.readLine()) !=null){
    data.add(line);
}
br.close();
Arraydata=(String[][]) data.toArray();
}
catch(IOException ioe){
    ioe.printStackTrace();
}
}

@Override
public String getColumnName(int colu){
return col[colu];
}

public int getRowCount() {
return Arraydata.length;
}

public int getColumnCount() {
return col.length;
}

public Object getValueAt(int rowIndex, int columnIndex) {
return Arraydata[rowIndex][columnIndex];
}
}
但它也有例外

这是我的例外:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [[Ljava.lang.String;
    at javaapplication1.ReadFileToList.<init>(ReadFileToList.java:37)
    at javaapplication1.ReadFileToListM.<init>(ReadFileToListM.java:8)
    at javaapplication1.ReadFileToListM.main(ReadFileToListM.java:22)
Java Result: 1

请帮助我,谢谢。

似乎存在NullPointerException,因为ReadFileToList中的Arraydata为null

你在哪里填写数据?看起来方法ReadFileToList.readtolist从未被调用,它不是AbstractTableModel的一部分,您也不会手动调用它


您应该调用readtolist或将其更改为构造函数。

ReadFileToList类的构造函数为空,您应该更改:

public void readtolist() throws IOException{

因为如果不这样做,模型的初始化(下面的代码)就不会执行将数据放入集合中的方法,而只执行扩展类中的constructor

ReadFileToList rftl=new ReadFileToList();
第二

不能将一维动态大小数组的列表强制转换为二维数组。模型中的其他方法看起来不错

您还应该以某种方式将数据从文件中分离出来。此时,它只拆分为行

如果你给我们看文件中的几行,那将非常有帮助

编辑:发布文件内容后于2013年1月6日更改为该版本

public ReadFileToList() throws IOException{
    FileReader fr=new FileReader("D:/AllUserRecords.txt"); //one slash instead of two backslash
    BufferedReader br=new BufferedReader(fr);
    String line = br.readLine();
    while((line=br.readLine()) !=null){
        data.add(line.trim());  //trim() delete spaces before and after line
        System.out.println(line);
    }
    br.close();
    Arraydata = new String[data.size()][];
    for (int i=0;i<data.size();i++){
        Arraydata[i]=data.get(i).split(" "); //split text to array by space
    }

}
结果:

我可能遗漏了什么,但您似乎没有打电话给readtolist。这就解释了为什么Arraydata是空的。另外,在
列表上调用
toArray()
无法返回
字符串[][]
。我还没有解决我的问题!我更新我的代码和异常。您可能想考虑使用左边的嘀嗒符号来接受答案。
public ReadFileToList() throws IOException{
ReadFileToList rftl=new ReadFileToList();
public ReadFileToList() throws IOException{
    FileReader fr=new FileReader("D:/AllUserRecords.txt"); //one slash instead of two backslash
    BufferedReader br=new BufferedReader(fr);
    String line = br.readLine();
    while((line=br.readLine()) !=null){
        data.add(line.trim());  //trim() delete spaces before and after line
        System.out.println(line);
    }
    br.close();
    Arraydata = new String[data.size()][];
    for (int i=0;i<data.size();i++){
        Arraydata[i]=data.get(i).split(" "); //split text to array by space
    }

}
public class ReadFileToListM  {

public ReadFileToListM() throws IOException{
    JFrame frame=new JFrame();
    ReadFileToList rftl=new ReadFileToList();
    JTable table=new JTable(rftl);
    JPanel panel=new JPanel();
    JScrollPane sp=new JScrollPane(table);
    panel.add(sp);
    frame.add(panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(470,470);
    frame.setVisible(true);
}

public static void main(String[] args) throws IOException{
    new ReadFileToListM();
}
}