2012-03-23 14 views
1

基本的なサーバーは動作していますが、GUIのボタンを押してそのサーバーを実行できるようにしたいと考えています。Java Swing GUIを使用して、バックグラウンドでサーバーソケットを実行してもGUIを使用するにはどうすればよいですか?

現在、サーバーを実行するためにボタンを押すと、Netbeansで強制停止するまで、ボタンは押されたままで残りのGUIにはアクセスできません。私はサーバーなどを停止するためのボタンを追加したいので、何かのためにGUIとやりとりしながら、バックグラウンドでサーバーコードを実行させる方法を知りたがっています。

これをGUIでどのように達成できますか?

+0

質問を編集して、コードの詳細を少なくとも提供してください。それ以外の場合は、「基本サーバー」が何であるかを推測します。 – Gray

+0

@Andrew EDT ==イベントディスパッチスレッド? – Gray

+1

@Hovercraft私はそのコメントを答えにアップグレードすることを決めました。 –

答えて

11

EDT(Event Dispatch Thread)をブロックしないでください。サーバーをThreadで実行します。詳細については、Concurrency in Swingを参照してください。

コメントに言及

、だけでなく、この(非常に)example of providing a Swing GUI for a server & client関連を参照してください。

enter image description here

+0

偉大な心とすべて.... .... –

+0

宇宙のマスターのために、匿名でup_voter、 – mKorbel

+2

この関連[例](http://stackoverflow.com/a/3245805/230513)も参照してください。 – trashgod

5

あなたは、この目的のためにThreadクラスを使用する必要があります。
メインクラスでrunnableインターフェイスを実装し、run()メソッドをオーバーライドします。 run()メソッドでボタンが押されたときに実行するコードを入れてください。次にボタンActionListenerでこのコードを書いてください:

new Thread(this).start(); 

これは異なる 'スレッド'でコードを実行します。

+3

私はあなたのアドバイスは、クラスの結束を減らしカップリングを増やすので、いくつかの弱点があると思います。ソケットコードは別のクラスになければならないので、GUIクラスはRunnableクラスであってはなりません。すべてのGUIコードについて完全に無知でなければなりません。また、SwingWorkerにはスレッドが持たないSwingスレッドとのやりとりや通信を可能にするツールがあるため、プレーンスレッドではなくSwingWorkerを使用する方がよいでしょう。 –

+0

私はちょうど彼の問題を克服するための速い解決策を彼に提供したいと思った。より大きいスケールで大きなプロジェクトはいはいです。この解決策は良いことではありません! – mehrmoudi

+1

私の意見では、私はこれがOPの問題だと思います、私はEDTについて本当の答えで編集することをお勧めします。 – mKorbel

関連する問題