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:在 java.net.AbstractPlainDatagramSocketImpl.receive(Unknown Source) 在 java.net.DualStackPlainDatagramSocketImpl.receive0(Unknown Source) 的 java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method) 接收超时。 java.lang.Thread.run(未知源)处 thread.ThreadListenResponseQuery.run(ThreadListenResponseQuery.java:46)处的 DatagramSocket.receive(未知源)

4

3 回答 3

2

环绕:socket.receive_try-catch

try {
    socket.receive()
} catch (SocketTimeoutException e) {
    // Log an error, abort an communication, or just ignore
}
于 2013-05-09T19:50:03.713 回答
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 回答