2016-09-12 8 views
0

私は少しヘルパーツールを自分自身にプログラミングしました。それはボタン "実行"と "停止"と少しGUIを得た。私が "実行"を押すと、プログラムは何かを連続して行うループを実行します(http要求 - 何時間にもいくつか)。Java | 「永遠の」ループが実行されている間にJFrameを閉じる方法は?

しかし、私は "実行"を押すと、ボタンが押されたままになり、プログラム/ GUIがプロセスが終了するのを待つという問題があります。この時点で私はウィンドウを閉じたり、 "停止"ボタンを押したりすることはできません。プロセスは永遠に実行されているので、私はそれを終了することはできません - もちろん、私はタスクマネージャでプロセスを終了することができます。

この問題を回避する方法はありますか?

私が参考に答え;-) 1しか推測できるコードなし

+1

永遠のループを実行するための新しいスレッドを開始します。 –

+3

EDT(Event Dispatch Thread)をブロックしないでください。それが起こると、GUIは「フリーズ」します。詳細と修正については、[Swingの同時実行性](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/)を参照してください。 –

+0

そしてありがとう! –

答えて

2

のために楽しみにしていますが、あなたが最も可能性の高いボタンを押して処理する方法もこれらの要求を起動することを意味し、同じスレッド上のすべてを実行しています。

このアプローチの問題は、イベントディスパッチスレッド(Event Dispatching Thread)がイベントやその他のUI操作を処理するスレッドですべて行われることです。このスレッドの長時間の操作では、UIが応答しなくなります。

この問題を解決するには、すべての作業を行うスレッドをRunイベントハンドラに起動させる必要があります。これにより、EDTはユーザーの操作を自由に処理できるようになります。

+0

ありがとうございます、今はうまくいきます! 私の最初の投稿を編集するのはもうソースコードが必要ではないと思う:-) –

+0

@Leeengold:どうぞよろしくお願いします。 – npinti

関連する問題