2012-04-03 6 views
1

私はこのボタンコードでexecuteメソッドを使用する方法でswingworkerを使用しました。すべて正常に動作しますが、問題は私が望むことです実行メソッドの終了直後にパネルを表示します。実行メソッドがタスクを終了する前にパネルが表示されます。ここにコードがあります。実行メソッドがそのタスクで終了したら、パネルを表示する方法を教えてください。SwingWorker実行メソッドがそのタスクを完了する前に表示されるパネル

   Main f2=new Main(); 
       f2.getfile(FileName,0); 
       f2.execute(); 
       Panel.setVisible(true); 
       Panel.setSize(815, 587); 

編集: まあ、誰もが同じproblem.Iに直面している場合、私は、このためのソリューションを、発見したGUIクラスで(showPanelそれを呼び出す)メソッドを作成し、SwingWorkerのはメトをやったときにしていますdを呼び出すと、パネルを表示するためのshowPanelメソッドが呼び出されます。

SwingWorker
+0

あなたのexecute()メソッドの最後でパネル作成を追加しないでください。 –

+0

@JimmyGustafsson実行メソッドがそのタスクで完了する前にパネルが表示されます – Xara

+0

Java命名規則を学んでください。 – kleopatra

答えて

2

は、次いでEDT(クラスJavadocのワーカースレッドと呼ばれる)別のThreadでその作業を行い、その実行後に/中にイベントディスパッチスレッドを更新することを可能にします。

終えたexecuteメソッドが明確であるclass Javadoc of the SwingWorkerクラス、に記載されている前に、あなたのパネルが目に見えるようになる理由は必読:

execute()メソッドは、このスレッドで呼び出されます。このワーカースレッド上で実行するためのスケジュールのSwingWorkerのとSwingWorkerの使用例についてthis answerを参照してください、またはそれ以上の情報についてSwing concurrency tutorialに相談し、直ちに

を返します。

+0

_SwingWorkerがEDTでバックグラウンドタスクを実行し、UI_ehhh ... noをブロックします。実行は_any_スレッドから呼び出すことができます(_schedules_と_worker thread_に重点を置いて引用を読むだけです)。@ Zaraが観測している呼び出しスレッドをブロックしません。execute()の下のコード行はすぐに実行する – kleopatra

+0

@kleopatraあなたは完全に正しいです。私はそれを投稿する前に、この回答の別の(誤った)バージョンを持っていて、SwingWorker javadocを読んだ後にすべてを修正したと思っていました。私が記述した振る舞いは、runメソッドisoをexecuteメソッドと呼ぶと、おそらく起こります。私は私の答えから間違った部分を削除した – Robin

関連する問題