ボタン付きのSwingフォームがあります。これは、クリックするSocketServerと、別のスレッドで着信要求をリッスンするために開始されます。以下は私が持っているクラスの構造です。
MainForm:これは、SwingFormを起動する私のメインクラスです。「サーバーの起動」と「停止」の2つのボタンがあります。MySocketServer:このクラスはSocketServerオブジェクトが存在する場所であり、メソッドstartServer()と。がありstopServer()ます。
以下は、スタートボタンのクリックイベント本文です。
t = new Thread(new Runnable() //Object t is created globally in this main class.
{
public void run()
{
myss = new MySocketServer(); //Object myss has similar accessibility as t.
myss.startServer();
}
});
t.start();
そして、以下は停止ボタンのクリックイベント本文です
myss.stopServer();
if(t.isAlive());
System.out.println("Thread is still alive!!");
SockeServerの「開始」と「停止」は好きなときに切り替えることができますが、サーバーを起動するたびに新しいスレッドが作成され、サーバーがMySocketServerのメソッドを使用して停止してもアクティブなままであることに気付きます。
スレッドの実行を使用stop()して停止することはできますが、減価償却され、メソッドが完全に実行されるThreadとスレッドが終了することを調査したため、接続されたクライアントを個別に処理できるようにメソッドを分離しました。run()startServer()
startServer()While-Listenループがあることに注意してください。したがって、ループを明示的に呼び出して停止するrun()まで、基本的にスレッドのメソッドは無限の実行状態にあります。stopServer()
ここで何ができるでしょうか?