【发布时间】:2017-06-10 23:04:48
【问题描述】:
有没有办法(不管它有多“hacky”)来检测 Java 的 System.err 何时被写入以便能够在发生这种情况时执行逻辑? — 我目前正在使用Thread 的自定义子类(我们称之为SwallowingThread),它在Thread.run() 的实现中以类似于以下代码的方式吞下了许多异常:
public final class SwallowingThread extends Thread {
...
@Override
public void run() {
ServerSocket socket = new ServerSocket(80, 100);
try {
Socket connected = socket.accept();
// Do stuff with socket here
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
然而,在我的代码中,我希望能够处理使用SwallowingThread 实例时发生的UnknownHostException 和IOException 的情况;有没有办法在它发生后检测到这种捕获并打印到标准错误? — 我最初尝试编写 UncaughtExceptionHandler 来执行此操作,只是发现它没有捕获异常,因为它们被吞下而不是简单地被例如包裹在RuntimeException 中并向前扔。
当然,解决这个问题的一个“更好”的方法是重写类的逻辑,但是没有不接触SwallowingThread的快速和肮脏的解决这个问题的方法吗?
【问题讨论】:
-
您可以创建一个
PrintStream包装System.err吗?System.setErr(new MyDelegatingPrintStream(System.err)); -
@MuratK,不,我不想简单地将输入 stderr 的数据放到另一个地方:我希望能够执行一些逻辑一次/如果这些数据被写入 stderr。
标签: java multithreading exception exception-handling stderr