2011-10-05 5 views
0

フラクタルを表示するプログラムを作成し、ユーザーがクリックすると、プログラムが再計算され、ズームされます。しかし、プログラムが最初のズームを処理している間にユーザーがもう一度クリックすると、私はそれを停止し、2番目のズームにまっすぐにスキップします。しかし、プログラムがビジー状態であるため、マウスイベントはGUIによって決して検出されません。アプリケーションがビジー状態であってもマウスイベントが処理されるようにするにはどうすればよいですか。キュー内のMouseEventsを確認する方法

+0

スレッディングは、このタイプのケースで役立ちます – doNotCheckMyBlog

答えて

3

SwingWorkerを使用してください。 GUIイベント(ボタンを押すなど)によってトリガーされるバックグラウンドタスクを実行するために使用されます。

あなたはSwingWorkerをキャンセルすることができます(おそらく何らかのルーピングを行います)。新しいタスクがサブミットされた場合は、実行中のタスクをキャンセルして次のタスクを開始します。

+0

+1、競争相手投票!これはより関連して聞こえる。基本的にはこれはスレッドで手動で行うことと同じことをしている必要があります:) – doNotCheckMyBlog

+0

これは私のやり方とほぼ同じです。ブール値がfalseに設定されたときにキャンセルされた実行可能スレッドを使用しました。 SwingWorkerで内部的に使用されているのと同じメカニズムです。ありがとう! – Fractaly

2

私が上記のコメントで通常言ったように、あなたが探しているものはスレッディングと呼ばれています。このリンクをクリックすると、その情報が表示されます。

http://download.oracle.com/javase/tutorial/essential/concurrency/

バックグラウンドで他のスレッドがビジー計算している間、スレッドは、あなたのUIスレッドの仕事をできるようになります。

幸運!

0

ありがとう、私は別の解決策を見つけました:新しいフラクタルを生成するための実行可能ファイルを作成しました。ループは特定のブール値がfalseになったときに終了するループで実行されます。 guiがマウスのクリックを検出すると、そのブール値をfalseに設定し、新しいズーム座標で計算スレッドを再び実行します。

+0

私は過去にSwingスレッドがうまく機能しなかったので、Swing固有のスレッドツールから離れようとしました。 – Fractaly

関連する問題