現在、シリアル化を使用して 'Player'タイプのクラスのインスタンスを複数保存して読み込もうとしています。 (これはfyiとしての割り当て用です)。ObjectInputStreamを介してクラスのArraylistを保存してロードする
プロセスの現在の動作は、ObjectOutputStream.writeObject(Player)を介してクラスを実行することです。これは、クラスデータのように見えるテキストファイルを取得するときに機能するようです。
私が現在持っている問題は、クラスを逆読みして読み込んだときに、オブジェクトをプレーヤーオブジェクトにキャストすることができず、例外をスローしているということです。しかし、正確な例外を出してください。
下記の機能をご覧ください。
保存機能:
public void savePlayers(ArrayList<Player> p)
{
FileOutputStream fout = null;
ObjectOutputStream oos = null;
try
{
fout = new FileOutputStream("Player.txt");
oos = new ObjectOutputStream(fout);
for(Player player: p)
{
oos.writeObject(p);
}
fout.close();
oos.close();
}
catch(Exception e)
{
System.out.println("Error is: " + e);
}
finally
{
closeStreams(fout, oos);
}
}
ロード機能:
public ArrayList<Player> loadPlayers()
{
ArrayList<Player> loadedList = new ArrayList<Player>();
FileInputStream fis;
ObjectInputStream ois;
try
{
fis = new FileInputStream("Player.txt");
ois = new ObjectInputStream(fis);
while(true)
{
System.out.println("Entered loop"); //testing
Object obj = ois.readObject();
System.out.println("Read object done"); //testing
Player p = (Player)obj;
System.out.println("Casted player"); //The line here doesn't run, prints out error from exception instead and exits loop
loadedList.add(p);
System.out.println("Loop iterated");
}
}
catch(EOFException eof)
{
}
catch(Exception e)
{
System.out.println("Exception here");
}
}
は、クラスを保存するためのより良い方法はありますか?キャスト時に何か問題がありますか?
は、なぜあなたは、実際のエラーメッセージを出力し、それが言うことは表示されません複数回全体のArrayListを書いていますか? – alfasin
Playerはどのように定義されていますか?また、静かに例外を飲み込まないでください –
おっと!先生はエラーがどこから来たのかを調べるためにタイプしましたが、私はそれを変更するのを忘れました。java.io.WriteAbortedException:書き込みが中止されました。 java.io.NotSerializableException:australianopen.GameController。 そのクラスを精査して何が起こっているのかを調べる – AidanJH