2012-02-14 9 views
2

Netbeansにはボタンとカードレイアウトが付いています。 このボタンにはactionListenerが登録されており、押されるとprocess.waitFor()で外部プログラムが実行されます。JavaのGUIはすぐには起動しません

私が望むのは、あなたがボタンを押すと、カードレイアウトでカードを交換して外部プログラムを実行する必要があるということです。 実際に何が起きるかは、外部プログラムが起動するボタンを押して、それが終了したときにguiがカードを交換するときです。

私はguiまたは何かのuppdatemethodを呼び出す必要がありますか?

+0

コードをしてください、それはあなたによって使用されている、非常に感謝されます。 –

+0

@GagandeepBali - 正直なところ、この場合は必要ありません。彼の質問は、問題の内容を正確に伝えています。 –

+0

@BrianRoach:正しい方向に彼/彼女を指すように、何を使用するのか、そしてそれをどこで使うべきか、私はコードが良い選択肢になるだろうと思う。 –

答えて

2

、ことを管理し、またはそれが終了していますかどうかをチェックするタイマーを使用する別のスレッドを持っている必要があります:

Thread t = new Thread(new Runnable() { 
    public void run() { 
    // call to ext. program 
    } 
}); 
t.start(); 
return; 
+0

AWTはスレッドセーフではないことに注意してください。したがって、1つのスレッドだけが同時にAWTコードを実行するようにしてください(一部の部分はスレッドセーフですが、それらを知る必要があります)。これは、 'synchronized'を使って、または' SwintUtilities.invokeLater(Runnable) 'を呼び出すことによって、AWTにリンクされたすべてを強制的にAWTスレッドで実行することによって行うことができます。また、別のスレッドから同じフィールドにアクセスすると、 'volatileまたは' synchronized 'になります。 –

+0

私はinvokeLaterメソッドを使用しました。これは正しい方法であると思われました。助けてくれてありがとう :) – Jonas

2

GUIイベントは1つのスレッドによって管理されます。あなたは、外部プログラムを実行して終了するのを待って、そのスレッドがその仕事(ディスプレイの更新)をやめないようにしています。イベントハンドラでそれをやっているので、それはあなたのコードを実行しているスレッドです。

あなたが別のスレッドであなたの外部プログラムへのお電話を移動など

関連する問題