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