2016-11-15 9 views
0

これは、この問題が過去数日間私を悩ませています。誰かがそれについてコメントする前に、私はjframeを見えるようにして、私が必要とするすべてのコンポーネントを追加しました。また、GUIがvisibleに設定され、activate()が呼び出される前に、すべてのコンポーネントが追加されます。JFrameは空白を開き、ループを実行してコンポーネントを表示します。

だから私は、コードのカップルsimepleラインを実行しようとしています。:

 g.setVisible(true); 
     g.activate(); 

十分にシンプル。 gはJFrameを拡張するGUIを作ったクラスIから作られたオブジェクトです。 activate()は、ユーザーが終了するように指示するまで、一連の処理を行う無限ループを実行するメソッドです。しかし、プログラムがg.setVisible()行に到達すると、指定したサイズのJFrameが開きますが、何も完全に欠けています。その後、g.activate()に移動します。現在は特定の反復回数だけ実行され停止します。どの時点で最終的にGUIに戻ることができるかを決定します。その問題は、GUIがactive()からのループによって更新され、何が起こっているのかをユーザーに知らせることを意味します。

さらに詳しい情報が必要な場合は事前にお知らせください。

+0

あなたは私たちにactive()メソッドのコードを与えることができます。追加情報のため – msagala25

+1

より良い助けのためにはすぐに[mcve]を投稿してください。私は、無限ループを実行する方法が嫌いです。無限ループではなく、そのためにactionListenersを使いたいと思うかもしれません。おそらくあなたはスイングタイマーが必要で、おそらくあなたのGUIをEDTの中に置いていますが、私はこれら2行のコードで何が間違っていると言うことはできません、もっと必要です – Frakcool

+0

残念ながら、私は非常に書くことができない限り、自身のactionListener。 –

答えて

3

さまざまなUIフレームワークでは、すぐに実行するのではなく、いくつかの作業をキューに入れる方法が一般的です。あなたの説明から、setVisible()はネイティブウィンドウを作成しているかもしれませんが、コンポーネントのレンダリングをキューイングしているようです。このコードは(おそらく)UIスレッドで実行されているため、実行後にキューに入れられた作業は実行されません。activate()

長時間実行するタスクは、UIスレッドで実行しないでください。 Swingでは、SwingWorkerを使用するか、明示的にバックグラウンドスレッドを作成することができます。

+0

(1+)詳細については、[Concurrency](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)のSwingチュートリアルのセクションを参照してください。 – camickr

+0

@camickr You misclicked;) –

+0

あなたは私が単純に別のスレッドでそれを実行しなければならなかったので、私はそれを比較的容易に理解することができました。ご協力いただきありがとうございます。 –

関連する問題