1

さて、メニューシステムを立ち上げ、JFrame から作業することができました。キャンバスを開始するボタンをクリックするまで、すべてがうまく機能しているようです。キャンバスが行うことは、キャンバスを拡張する JFrame を初期化するため、スレッドを使用できません。フレームが起動して実行されると、この後、while true {} を持つメソッドが呼び出され、フレームを閉じることができません。static void main を使用してキャンバス アプリケーションを実行する場合、これは以前は問題になりませんでした。新しい JFrame が閉じないというこの問題を修正するにはどうすればよいですか?

4

2 に答える 2

5

新しい JFrame が閉じないというこの問題を修正するにはどうすればよいですか?

EDT (Event Dispatch Thread) をブロックしないでください。ブロックすると、GUI が「フリーズ」します。無限ループを作成する代わりに、実行時間のSwingWorker長いタスクを実装します。詳細については、Swingでの同時実行を参照してください。

于 2012-07-31T01:34:39.113 に答える
0

1. GUI アプリケーションを操作するときは、常に UI スレッドで UI 作業を維持し、非 UI スレッドで非 UI 作業を維持するという経験則を作成します。

2. 2番目の doNot mix up SWINGAND AWT.

3. Java GUIのmain() メソッドは長く存続しません。イベント ディスパッチャー スレッド (EDT) で作業をスケジュールした後、メソッドmain()終了します。現在、GUI を処理するのは EDT の責任です。

4.したがって、非 UI プロセス集約型の作業と EDT を混同しないでください。

EDT を使用して GUI を処理します。

例えば:

public static void main(String[] args){


     EventQueue.invokeLater(new Runnable(){

                myframe.setVisible(true);

       });


 }
于 2012-07-31T09:50:19.280 に答える