私はDatagramSocket
をメインスレッドに作成し、内部クラススレッドを作成してポートをリッスンします。メインスレッドのDatagramSocket
を閉じると、エラーsocket closed
が発生しました。内部クラスのスレッドでは、というメソッドが呼び出され、内部クラスのスレッドがブロックされたためです。ここでは内部クラスのコードは次のとおりです。スレッド内のブロックメソッドDatagramSocket.receive()を停止するには
class ReceiveText extends Thread
{
@Override
public void run()
{
while(true)
{
byte[] buffer = new byte[1024];
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
try {
udpSocket.receive(dp);//blocked here
byte[] data = dp.getData();
String message = new String(data, 0 , dp.getLength());
setTxtAreaShowMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
私は近いDatagramSocketの前に内部クラスのスレッドを停止したいのですが、stop()
方法が推奨されていません。どうやってやるの?
、感謝 – cloud
私もこの作品を確認することができます(あなたがsocket.receiveを呼び出す前に設定していることを確認します())ここで
このサイトで答えた例があります!データグラムソケットの受信ループにあるワーカースレッドから抜け出す方法 – Nerdtron