2013-05-09 114 views
0

我想禁用一个由套接字超时产生的错误消息,因为它正在填充我的控制台(Linux,终端)。Java在特定的调用中禁用堆栈跟踪?

的代码:

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(Unknown Source) at thread.ThreadListenResponseQuery.run(ThreadListenResponseQuery.java:46) at java.lang.Thread.run(Unknown Source)

回答

2

环绕socket.receivetry-catch

try { 
    socket.receive() 
} catch (SocketTimeoutException e) { 
    // Log an error, abort an communication, or just ignore 
} 
1

看看this

书面由Alex W,有可能赶在Java中Throwable对象没有一个堆栈跟踪:

Throwable(String message, Throwable cause, boolean enableSuppression,boolean 
writableStackTrace) 
+0

我已经尝试过了,它不工作。 – 2013-05-09 19:50:12

+0

检查编辑,希望它有帮助。 – 2013-05-09 19:55:30

1

如果只是抑制整个例外会让真的很难搞清楚什么是真正回事。相反,我只想打印日志输出可能是这样的:

try { 
    // invocation that throws the exception 
} catch (SocketException e) { 
    System.out.println(e.getMessage()); 
}