2011-01-11 9 views
0

ユーザーがメニューから終了オプションを選択した場合、どうなるでしょうか? 私は、アプリケーションを終了しようとしているユーザーのイベントを管理できるようにしたいと考えていますが、いくつかのアクティビティが実行されているため、終了できないようにしています。何かが実行されている場合に終了オプションがありません

ここに私が書いたコードがあります。一言で言えば :

  • 録画が実行されている - >ユーザーが終了をクリック - > WARNING「プロセスは、あなたがそれを行うことはできません実行している」(プロセスが進む)

  • 何もありません実行している - >ユーザーは、終了をクリック - >アプリケーションが

を閉じて、それだけで プログラム全体を書き換えることなく数行のコードを追加することで問題を解決することは可能ですか?

ありがとうございます。あなたがきれいにこれを実行するために、あなたの仕事を追跡する必要が
MAX

exitAction = new AbstractAction("Exit") { 

      public void actionPerformed(ActionEvent e) { 

       System.exit(0); 
      } 
     }; 
     exitAction.putValue(Action.NAME, "Exit"); 
     // description 
     exitAction.putValue(Action.SHORT_DESCRIPTION, "Exit application"); 
+0

ユーザーの操作を防止することは悪い考えです。代わりに、何が起きているのかをユーザーに知らせるダイアログをポップアップし、プログラムが終了することを確認するよう求めます。 – Anon

答えて

0

。できない場合は、すべてのjvmスレッドを繰り返し実行し、ワーカースレッドのいくつかが実行可能状態にあるかどうかを調べることができます。

彼が望むならば、タスクマネージャーの大きな斧でアプリケーションを殺すことを忘れないでください:)。

+0

スレッドが実行されているかどうかを確認するにはどうすればよいですか?それは私にとっては結構問題です。 – max

+0

Thread.isAlive()メソッド?http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#isAlive()? –

+0

私はこれを試してみましたが、私は エラー理由を私は知らない エラーが発生します: - もし(RecThread.isAlive())>非静的メソッドのisAlive()静的コンテキスト から参照することはできません{ JOptionPane.showMessageDialog (この、 "警告!"、 "スレッドの実行"、JOptionPane.WARNING_MESSAGE)。 }他{ でSystem.exit(0);あなたは、実際のスレッドオブジェクト:)への参照を取得する必要がありますか@max } – max

0

「実行中」とは未完成のスレッドを意味する場合は、起動したすべてのスレッドをループして.join()を呼び出すことができます。その前にすべてのスレッドが終了するのを待っているメッセージを表示してください。終了するようにしますか?

+0

これは動作しますか?私の理解から、join()を呼び出すと、スレッドのrun()メソッドが完了するまでメソッドが返らないことが保証されます。彼は彼のアプリをシャットダウンし、すべてのスレッドを結合した場合、結果として、彼が完了するまでにそれらのスレッドを待つ必要がために起こっています。 – JasCav

+0

Joinは、現在のスレッドをブロックします。 exit()である次の行に進むことはできません。 – Bozho

0

変数を使用して小さなフラグを設定し、チェックしたいプロセスの最初にtrueに設定し、終了するとfalseに設定します。

次に、終了イベントで、その変数がtrueまたはfalseであるかどうかを確認できます。

0

アプリケーションでスレッドを使用していない場合(わかりやすくするためにカバーしていますが)、アプリケーションを終了すると、Event Dispatch Thread(EDT)がすべてを閉じますあなたのために。

それ以外の場合は、システムのスレッドを正しく管理して追跡し、システムをシャットダウンする前に終了して終了することが重要です。これを行うにはいくつかの方法があります(stop()を使用せず、destroy()を避けてください)。私のお勧めは、あなたのスレッド内では、シャットダウンすべきかどうかを確認するための時間を取ることです(シャットダウン時にシステムによって設定されるフラグがこのような可能性の1つです)。こうすることで、スレッドをクリーンアップしたり、データをファイルに保存したり(必要な場合は何でも)、正常にシャットダウンすることができます。

関連する問題