#java #exception
#java #исключение
Вопрос:
У меня интересная проблема. Мой блок кода приведен ниже. Проблема в том, что файл журнала не содержит строки «Подготовка к сну ..», но содержит строки «Резервный поток был прерван …». Мой вопрос: возможно ли поймать исключение, не попадая в его блок try?
long sleepTime = runtime.getTimeInMillis() - Calendar.getInstance().getTimeInMillis();
try {
log("Getting ready to sleep...(" sleepTime ")");
Thread.sleep(sleepTime);
Database db = new Database();
log(db.performDatabaseBackup());
// Set it to run the next day.
runtime.add(Calendar.DATE, 1);
} catch (InterruptedException ie) {
log("Backup thread was interrupted...");
}
Редактировать: метод журнала
private void log(String message) {
Logger.debug(this, message);
}
и Logger.debug
public static void debug(
Object obj,
String message ){
debug( obj.getClass(), message );
}
public static void debug(
String className,
String message )
{
try
{
Class inputClass = Class.forName( className );
debug( inputClass, message );
}
catch ( ClassNotFoundException e )
{
debug( ( Class )null, message );
}
}
Комментарии:
1. Короткий ответ: нет. Там должно быть что-то еще на работе. Я рекомендую попробовать удаленный отладчик.
Ответ №1:
Нет, невозможно перехватить исключение, не выданное во время выполнения его try
блока. Возможные ситуации:
-
InterruptedException
выдается перед входом"Getting ready..."
в систему, т.Е. в вашемlog(...)
вызове. (маловероятно) -
Метод Log работает не так, как ожидалось, и не регистрирует вашу строку. (вероятно) Можете ли вы проверить, выполняется ли режим ожидания, установив высокое время ожидания. Это подразумевало бы эту причину.
-
У вас есть другие фрагменты протоколирования кода
"Backup thread was interrupted..."
, которые вызывают вывод журнала, и представленный фрагмент кода вообще не выполняется.
Ответ №2:
Я предполагаю, что метод log не работает должным образом? Я не верю, что блок catch можно ввести без ввода блока try. Другой альтернативой является то, что метод log вызывает исключение InterruptedException?
Можете ли вы также опубликовать свой метод ведения журнала?
Ответ №3:
Если вы вводите catch
блок, внутри блока генерируется исключение try
. Точка.
Чтобы решить вашу проблему: распечатайте трассировку стека исключения и посмотрите, не вызывает ли log()
он также некоторые исключения.