Java低速GUI Swing 7at TECH
Java低速GUI Swing 7 - 暇つぶし2ch170:デフォルトの名無しさん
08/06/06 12:29:30
> そのたびにinvokeLater()を使うことになり、大変コーディング量が多くなると思います。
例えば、main()から実行を開始する場合、invokeLater()に渡す
Runnable#run()内で、Window(JFrame等)インスタンスやその他コンポーネントを構築して実行を開始します。
そうすれば、invokeLater()を意識せずともEDT上で実行されますので、通常は、その都度invokeLater()を呼び出す必要はありません。

> Swingでアプリを作っている人は、SwingのAPIを使用するとき、invokeLater()を
> 使ったり使わなかったりしていると思っています。
> そこで質問があるのですが、invokeLater()を使ってSwingのAPIを呼び出すのと
> invokeLater()を使わないことの切り分けの基準みたいなものがありましたら、
時間がかかる処理で、描画を伴わない場合、EDTと別スレッドで実行し、その処理が実行された後に、
GUIの描画を更新する必要がある場合、invokeLater()を使用します。
例えば、ListModelやTableModelをEDTと別スレッドで生成(Listenerが登録されておらずGUIと無関係であること)後、
そのModelをJList#setModel(),JTable#setModel()で設定する場合、setModel()内で再描画が要求されるため、
setModel()の呼び出しはEDT上で実行する必要があります。

もちろん、EDTと別スレッドで実行した処理がGUIと無関係であれば、上記の処理は不要です。

まぁ、ともあれ、Sunのページを読んで動作原理を理解した後、SwingUtilities#invokeLater(),SwingUtilities#invokeAndWait(),
SwingWorkerクラスも調べて、実行していれば自ずと理解できるのではないでしょうか。

切り分けの基準は、169と一緒。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch