0

ファイルを読み取ってarraylistに保存し、配列に変換するコードがあります(テーブルモデルに使用するため)

私のクラスは、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];
}
}

私のメイン クラスは ReadFileToListM です。

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class ReadFileToListM  {
ReadFileToList rftl=new ReadFileToList();
public ReadFileToListM(){
    JFrame frame=new JFrame();
    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){
    new ReadFileToListM();
}
}

しかし、例外があります!

これは私の例外です:

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

私のtxtファイル:

 FName Lname Number
 second secondsecond 22
 thired thithird 33
 fourth fourfourr 44
 fifth fiffif 55

助けてください、ありがとう。

4

2 に答える 2

2

ReadFileToListクラスのコンストラクターが空であるため、以下を変更する必要があります。

public void readtolist() throws IOException{

public ReadFileToList() throws IOException{

モデルの初期化(以下のコード)を実行しない場合、コレクションにデータを配置するメソッドは実行されず、拡張クラスからのコンストラクターのみが実行されるためです。

ReadFileToList rftl=new ReadFileToList();

2位

1次元の動的サイズの配列であるListを2次元の配列にキャストすることはできません。モデルの他の方法は良さそうです。

また、どういうわけかファイルからデータを分離する必要があります。現時点では、行に分割されているだけです。

ファイルから数行を表示すると非常に役立ちます。

編集:2013年6月1日ファイルの内容を投稿した後モデルのCountructorをこれに変更します

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

結果: 結果

于 2013-01-05T22:34:41.743 に答える
0

ReadFileToList の Arraydata が null であるため、NullPointerException が発生しているようです。

どこにデータを入力しますか?メソッド ReadFileToList.readtolist が呼び出されないように見えます。これは AbstractTableModel の一部ではなく、手動で呼び出していません。

readtolist を呼び出すか、コンストラクターに変更する必要があります。

于 2013-01-05T22:15:29.440 に答える