1

これは、より大きなグラフ作成プログラム (具体的には JavaPlot) の一部です。一言で言えば、私は何かをグラフ化しようとします。グラフは

out.write(comms); 

しかし、ヒットすると閉じます

out.close()

OutputStreamWriter を閉じる必要があることはわかっているので、その行を削除する代わりに、ユーザーが「Q」を押すまで待機する Scanner を作成しました。その後、プログラムは通常どおり続行し、グラフ、OutputStreamWriter、および Scanner を閉じます。

        OutputStreamWriter out = new OutputStreamWriter(proc.getOutputStream());
        out.write(comms);
        out.flush();

//added from here
        //waiting until input is given
        Scanner timeKiller = new Scanner(System.in);
        String check = timeKiller.nextLine();
        if(check != "q"){
            check = timeKiller.nextLine();  //<---waiting here. 
        }
        timeKiller.close();
//to here

        out.close();

私がしていることは危険ですか?誰かがウィンドウを閉じてグラフを閉じても、プログラムは強制終了されませんよね? これによってメモリ リークが発生することはありませんが (そうですか?)、プロセスがまだ実行中で、このプログラムを数回実行すると、最終的に問題が発生し始めます。どうすればこれを修正できますか? 頭のてっぺんから、ウィンドウが閉じている場合にループを壊すリスナーをウィンドウに追加することはできますか? それとも私が間違っていて、これはまったく問題ではありませんか?

4

2 に答える 2

2

最新の書き込み後にストリーム/ライターをフラッシュした場合、close最初にストリームを呼び出さずにアプリケーションを終了しても、データは失われません。また、アプリケーションを終了すると、JVM が終了し、ストレージ リークは関係なくなります。

一方、アプリケーションがおそらく終了すべきときにアプリケーションを終了させず、結果としてユーザーが複数のインスタンスを生成した場合、多くの JVM がユーザーの PC のメモリをいっぱいにするという問題が発生します。これが発生した場合、孤立した JVM を処理する場合と比較して、仮想的なリーク ストリームは重要ではありません。

しかし、あなたの質問からは、あなたが実際に何をしているのか、および/または何をすることを提案しているのかが本当に不明であるため、あなたの特定の状況について実際にコメントすることはできません.

于 2012-07-13T14:42:48.713 に答える
1

ウィンドウには setDefaultCloseOperation があり、System.exit(0) を実行する EXIT_ON_CLOSE に設定できます。

于 2012-07-13T14:50:00.703 に答える