0
private void addSomeComponentsToFrame(){
JFrame frame = new JFrame();
.....
frame.setVisible(true);

frame.getContentPane().validate();
frame.getContentPane().repaint();

runOtherTask();
}

runOtherTask メソッドが開始する前にフレーム オブジェクトとそのコンポーネントを表示したいのですが、addSomeComponentsToFrame メソッドを実行しようとすると、フレームが (黒い四角形として) 表示されますが、フリーズし、runOtherTask メソッドが完了すると、フレームのコンポーネントが画面に表示されます。

4

1 に答える 1

3

addSomeComponentsToFrame メソッドを実行しようとすると、フレームが (黒い四角形として) 表示されますが、フリーズし、runOtherTask メソッドが完了すると、フレームのコンポーネントが画面に表示されます。

Event Dispatch Thread実行時間の長いタスクをブロックしているようです。

そのタスクを EDT から別のスレッドにオフロードすることができます。

Swing コンポーネントをrunOtherTaskより適切に操作する場合:

それ以外の場合は、次を使用できます (以下は GUI では実行されないため、GUI でEvent Dispatch ThreadSwing コンポーネントを操作することはできません):

補足として、次のものは必要ありません。

frame.getContentPane().validate();
frame.getContentPane().repaint();

単に:

frame.validate();
frame.repaint();

また、Java のバージョンrevalidate()validate(). ただし、これらは、可視コンテナからコンポーネントを追加/削除する場合にのみ必要です。

于 2013-02-15T14:43:50.817 に答える