0

コンソール (Linux、ターミナル) がいっぱいになるため、ソケット タイムアウトによって生成されるエラー メッセージを無効にしたいと考えています。

コード:

public ThreadListenResponseQuery(DatagramSocket socket){
   this.socket = socket;
   try {
      socket.setSoTimeout(1500);
   } catch (SocketException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
   }
}

@Override
public void run(){
   System.out.println("Waiting for response...");

   // Waiting for 60 seconds...
   while(System.currentTimeMillis() < startTime + 60000){

      socket.receive(receive_packet);   
      // .. Additional work

   }
}

プログラムは、応答を得るために 60 秒間待機しています。while応答メッセージが来ないとサイクルがフリーズするため、ソケットにタイムアウトを設定しています。

エラー:

java.net.SocketTimeoutException: Receive timed out at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method) at java.net.DualStackPlainDatagramSocketImpl.receive0(Unknown Source) at java.net.AbstractPlainDatagramSocketImpl.receive(Unknown Source) at java.net. DatagramSocket.receive (不明なソース) で thread.ThreadListenResponseQuery.run (ThreadListenResponseQuery.java:46) で java.lang.Thread.run (不明なソース)

4

3 に答える 3

1

これを見てください。

Alex W によって書かれたように、スタック トレースなしで Java で Throwable オブジェクトをキャッチすることは可能です。

 Throwable(String message, Throwable cause, boolean enableSuppression,boolean 
writableStackTrace) 
于 2013-05-09T19:49:17.660 に答える
1

例外全体を抑制するだけでは、実際に何が起こっているのかを理解するのが非常に難しくなります。代わりに、次のようなログ出力を出力します。

try {
   // invocation that throws the exception
} catch (SocketException e) {
   System.out.println(e.getMessage());
}
于 2013-05-09T19:49:33.940 に答える