2012-05-09 9 views
2

内からJavaのモーダルのJDialogを閉じて、私はこれはおそらくJDialogのがとにかく使用されるがされなければならない の方法ではないと思うので、私はこの質問について少し悪い感じてい:が所有者クラス(JFrameの)

私が持っていますラベルを含んでいる非常に単純なJDialogであり、アプリケーションがメインスイングスレッドでわずか2,秒間実行されるタスクを実行している状況で を表示したいとします。ショートブロッキングタスクが で実行されている間に、 ユーザーがメインGUI上で何もクリックできないように、ダイアログはモデルでなければなりません。タスクが完了すると、モーダルダイアログは のユーザインタラクションなしで処分されるはずです。これはモーダルダイアログでは動作しません。 setVisible(true)メソッドが呼び出されると実行が停止してしまいます ユーザーとのやりとりなしに所有者側からクローズする方法を見つけられません...

このようなブロッキング ダイアログを別の方法で実装する方法については、助けや提案に非常に感謝します。

+1

代わりにSwingXのBusyLabelまたはBusyPainterを使用しないのはなぜですか?ペインタでラベルやコンポーネントをクラスペインに配置し、操作が終了したらそれを削除するだけです。それとも、 'setWaitPaneVisible(...)'メソッドを提供する 'JXFrame'を使用してください。 – Thomas

+0

何らかの理由でこのタスクを 'JDialog'関連のクラスに持ってきて、' visible(true) 'に設定した後に呼び出すことができれば、それはうまくいくかもしれませんが、POSTED CODEの部分がなくても言い難いです:( –

+0

私はSwingXを私に示唆してくれてありがとうございます - 私は現在私の目的のために使用できるようなBusyLabel APIを見ています - そして、サンプルコードを投稿しなかったのを残念に思っています。私は偉大な答えのために – fischvogel

答えて

2

はい、UIスレッドにモーダルダイアログを表示すると、実行は停止します。これを克服するには、SwingWorkerを使用するか、新しいスレッドを作成することもできます。

+0

1 +をやろうとしました。 –

関連する問題