私はJavaソケットプログラミングを初めて使い、現在ソケットAPIを探っています。 ServerSocket
を起動してクライアントを待ち受ける新しいシンプルなAppを作成しました。クライアントがソケットに何かを書き込むと、サーバーはそのクライアントの新しいスレッドを割り当てます。私はコンソールアプリケーションを使用して最初に試して、すべてうまくいきました。今、私はSWT(Eclipse 3.7のWindowBuilderプラグイン)を使用して同じものに対してGUIを作っています。ウィンドウには、サーバーのリスニングをオン/オフするトグルボタンがあります。以下は、SWT Buttonのclickイベントで記述されたコードで、クライアントのリスニングを開始します。UI SWTをUI用に使用するシンプルソケット(Java)アプリケーションでフリーズ
if(!isServerRunning)
{
btnServerRunner.setText("Stop Server");
isServerRunning = true;
while (listening)
{
try
{
new ClientHandler(listener.accept()).start();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
else
{
try
{
listener.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
btnServerRunner.setText("Start Server");
isServerRunning = false;
}
ClientHandler
クラスがThread
は拡張していますので、すべての新しいクライアントのための新しいスレッドを起動します。上記のコードはコンソールアプリケーションでは動作しますが、ボタンのクリックでクライアントソケットをリッスンする無限ループにアプリを投げているので、GUIでは機能しません。をアプリのUIをフリーズしていないクライアントをリッスンするために開始して停止するエレガントな方法は何ですか?
ありがとうございました。