メイン メソッドで OutputStrema を作成する必要がありますか?
状態を保存する時点でストリームを作成することをお勧めします。
私のプログラムが実行されると、その ObjectInputStream で保存されたデータ ファイルが取り込まれます。これを達成するためのコードを Main メソッドに入れますか?
良い選択のように聞こえます。基本的に、そのデータを必要とする何かをしようとする前に、これを行う必要があります。これを達成するものは何でも動作します (静的初期化を使用してそれを行うのは悪い考えです...)
ファイルが作成されているかどうかを確認し、作成されていない場合は作成し、作成されている場合はそこから読み取る必要がありますか?
この質問は、状態ファイルの書き込みと読み取りを混乱させます。それらはライフサイクルのさまざまな時点で発生し、さまざまなコードを使用してタスクを実行します。
保存ファイルを作成する前に保存ファイルが存在するかどうかを確認する意味はありません...既存の保存ファイルの名前を変更することを提案しない限り。
逆に、アプリケーションの起動時に保存ファイルが存在しない場合、それを開こうとするコンストラクターはFileNotFoundException
. 例外をキャッチして、保存された状態を読み取るコードをスキップするだけです。
…ファイルがまだ作成されていない場合、これはエラーになりますか?
はい。FileNotFoundException; 上記を参照。そのため、コードでそれを処理するか、ファイルを開こうとする前にファイルが存在するかどうかをテストする必要があります。File.exists()
および関連するメソッドを参照してください。
すべてのデータを保存できるように、終了するための WindowListener が必要ですか?
それは解決策の一部のように聞こえます。(しかし、プログラムがクラッシュしたり強制終了されたりした場合はどうでしょうか?そのような場合に状態を保存しますか?それともしないでしょうか?)
注意すべき点がいくつかあります。
GUI 関連のオブジェクトの多くは を実装していないためSerializable
、 を使用して保存することはできませんObjectOutputStream
。スレッド、ストリーム、ソケット、およびその他のいくつかのものもシリアライズできません。
を使用してクラスのインスタンスを保存しObjectOutputStream
、クラスまたはその名前を変更してから を使用して再ロードしようとするとObjectInputStream
、保存されたインスタンスがクラスの新しいバージョンと一致しないという問題が発生する可能性があります。そのシリアル化された状態を読み取れる必要がある場合、問題が発生します。