0

私のプログラムの目標は、閉じたときに保存し、開いたときに再ロードすることです。

ドライバー (すべてのグラフィックスを含む) があり、ファイルを作成して保存したいと考えています。私はインターネットで数多くのチュートリアルを見てきましたが、実際のプログラムでこのシステムを正しく実装する方法を説明していません。

メイン メソッドで OutputStrema を作成する必要がありますか? ファイルが作成されているかどうかを確認し、作成されていない場合は作成し、作成されている場合はそこから読み取る必要がありますか? これをすべて達成するにはどうすればよいですか?すべてのデータを保存できるように、終了するための WindowListener が必要ですか?

ありがとう

4

2 に答える 2

1

メイン メソッドで OutputStrema を作成する必要がありますか?

状態を保存する時点でストリームを作成することをお勧めします。

私のプログラムが実行されると、その ObjectInputStream で保存されたデータ ファイルが取り込まれます。これを達成するためのコードを Main メソッドに入れますか?

良い選択のように聞こえます。基本的に、そのデータを必要とする何かをしようとする前に、これを行う必要があります。これを達成するものは何でも動作します (静的初期化を使用してそれを行うのは悪い考えです...)

ファイルが作成されているかどうかを確認し、作成されていない場合は作成し、作成されている場合はそこから読み取る必要がありますか?

この質問は、状態ファイルの書き込みと読み取りを混乱させます。それらはライフサイクルのさまざまな時点で発生し、さまざまなコードを使用してタスクを実行します。

保存ファイルを作成する前に保存ファイルが存在するかどうかを確認する意味はありません...既存の保存ファイルの名前を変更することを提案しない限り。

逆に、アプリケーションの起動時に保存ファイルが存在しない場合、それを開こうとするコンストラクターはFileNotFoundException. 例外をキャッチして、保存された状態を読み取るコードをスキップするだけです。

…ファイルがまだ作成されていない場合、これはエラーになりますか?

はい。FileNotFoundException; 上記を参照。そのため、コードでそれを処理するか、ファイルを開こうとする前にファイルが存在するかどうかをテストする必要があります。File.exists()および関連するメソッドを参照してください。

すべてのデータを保存できるように、終了するための WindowListener が必要ですか?

それは解決策の一部のように聞こえます。(しかし、プログラムがクラッシュしたり強制終了されたりした場合はどうでしょうか?そのような場合に状態を保存しますか?それともしないでしょうか?)


注意すべき点がいくつかあります。

  • GUI 関連のオブジェクトの多くは を実装していないためSerializable、 を使用して保存することはできませんObjectOutputStream。スレッド、ストリーム、ソケット、およびその他のいくつかのものもシリアライズできません。

  • を使用してクラスのインスタンスを保存しObjectOutputStream、クラスまたはその名前を変更してから を使用して再ロードしようとするとObjectInputStream、保存されたインスタンスがクラスの新しいバージョンと一致しないという問題が発生する可能性があります。そのシリアル化された状態を読み取れる必要がある場合、問題が発生します

于 2012-05-27T01:52:50.327 に答える
1

はい、WindowListener は良いアイデアのように思えます。プログラムの状態を保存する 1 つの方法は、Propertiesを使用することです。上記にリンクされているチュートリアルをご覧ください。あなたの「グラフィック」に何を勧めるべきかわかりません。ここで何を意味するかについて、さらに詳しく教えてください。

編集

メイン メソッドで OutputStrema を作成する必要がありますか?

main メソッドで OutputStream を作成するという質問は、私たちが何も知らないプログラム構造について尋ねていることです。JFrameがそこで作成されたとしても(またはメインから呼び出される静的メソッドで)、メインメソッドでこのようなものを作成しないことを私の腸は教えてくれます。OutputStream は WindowListener を実装するクラスで作成され、これは独自のスタンドアロン クラスにすることができます。main メソッドをできるだけ小さくしたい。

ファイルが作成されているかどうかを確認し、作成されていない場合は作成し、作成されている場合はそこから読み取る必要がありますか?

おそらく。この質問は、一度作成された保存された情報をどうするかを中心に展開しています。おそらくあなたはそれを検索し、プログラムの起動時にそれを読むでしょうか? それはすべてあなたのニーズに依存するので、あなたが理解しなければならないことはわかりません.

これをすべて達成するにはどうすればよいですか?すべてのデータを保存できるように、終了するための WindowListener が必要ですか?

これが Swing アプリケーションの場合、はい、WindowListener はアプリケーションの終了を制御するのに役立ちます。

于 2012-05-27T00:46:33.630 に答える