Не существует способа (независимо от того, как «хакерство»), чтобы обнаружить, когда 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();
}
}
}
В моем коде, однако , Я хочу иметь возможность обрабатывать случаи UnknownHostException
и IOException
, которые возникают при использовании экземпляра SwallowingThread
; Невозможно ли обнаружить, что эта уловка и печать стандартная ошибка после ее возникновения? — Я изначально пробовал написать UncaughtExceptionHandler
, чтобы сделать это, чтобы узнать, что он не ловит исключения, потому что они были проглочены, а не просто были, например. завернутый в RuntimeException
и брошенный вперед.
Конечно, «лучший» способ решения этой проблемы - переписать логику для класса, но нет ли быстрого и грязного способа решения этой проблемы без необходимости касаться SwallowingThread
?
Вы можете создать 'PrintStream', что Обертывания' Возможно, System.err'? 'System.setErr (новый MyDelegatingPrintStream (System.err));' –
Возможный дубликат [Redirect System.out и System.err] (http://stackoverflow.com/questions/14715748/redirect-system-out-and- system-err) –
@MuratK, нет, я не хочу просто помещать данные, которые были введены в stderr в другое место: я хочу иметь возможность выполнить некоторую логику один раз/если эти данные записываются в stderr. – errantlinguist