0

コンストラクターに fname、lname、phone、address を含む Serializable インターフェイスを実装する Person オブジェクトのクラスを作成しました。このクラスのオブジェクトをストリームによって「.dat」ファイルに格納しています。これらの連絡先を表示したいです。 GUIで人を文字列にキャストしようとすると、ClassCastExceptionが発生します。誰かが助けてくれればありがたいです。

これはコンストラクタです:

public Person(String fName, String lName, String add, String ph) {
    //super();
    this.fName = fName;
    this.lName = lName;
    this.add = add;
    this.ph = ph;
}  

これは GUI クラス コードです。

public void windowOpened(WindowEvent e) {

    FileInputStream fis;
    ObjectInputStream ois;

    try {
        fis = new FileInputStream("person.dat");
        ois = new ObjectInputStream(fis);
        Person p = (Person) ois.readObject();
        String obj = (String) p.toString(); // giving error at this line
        StringTokenizer str = new StringTokenizer(obj, " ");

        textField.setText(str.nextToken());
        textField_3.setText(str.nextToken());
        textArea.setText(str.nextToken());
        // System.out.println(p);
        ois.close();
        fis.close();
    } catch (Exception ee) {
        System.out.println("Cannot Read File" + ee.getMessage());
        ee.printStackTrace();
    }
}
4

1 に答える 1

5

ClassCastException がここにある可能性がはるかに高い

Person p = (Person) ois.readObject();

この行では、キャストは冗長であり、削除できるため、ここでは発生しません

String obj = (String) p.toString();

と同じです

String obj = p.toString();

ただし、コードの最新のコピーが実行されていない場合は、プログラムが実行していると思われることを実行していない可能性があります。

于 2013-04-26T15:09:31.937 に答える