Лучшие практики для ловли Throwable в Java

Из какой-либо эти методы ControlPaint , полезные для этого? Это - то, что я обычно использую для пользовательски представленных средств управления.

12
задан 4 revs 26 July 2010 в 09:55
поделиться

3 ответа

Вероятно, самый важный из них: никогда не проглатывать проверенное исключение . Под этим я подразумеваю: не делайте этого:

try {
  ...
} catch (IOException e) {
}

, если только вы этого не хотите . Иногда люди проглатывают проверенные исключения, потому что они не знают, что с ними делать, или не хотят (или не могут) загрязнять свой интерфейс предложениями "throws Exception".

Если вы не знаете, что делать с ним сделайте это:

try {
  ...
} catch (IOException e) {
  throw new RuntimeException(e);
}

Другой вопрос, который приходит на ум, - убедиться, что вы имеете дело с исключениями. Чтение файла должно выглядеть примерно так:

FileInputStream in = null;
try {
  in = new FileInputStream(new File("..."));;
  // do stuff
} catch (IOException e) {
  // deal with it appropriately
} finally {
  if (in != null) try { in.close(); } catch (IOException e) { /* swallow this one */ }
}
12
ответ дан 2 December 2019 в 19:55
поделиться

Зависит от того, над чем вы работаете.

если вы разрабатываете API для использования кем-то другим, лучше повторно выбросить исключение или обернуть его в собственное исключение и выбросить.

Тогда как если вы разрабатываете приложение для конечного пользователя, вам необходимо обработать это исключение и сделать необходимое.

2
ответ дан 2 December 2019 в 19:55
поделиться

Если вы пишете очередь диспетчера, то к тому времени, как исключение вернется к вам, нет смысла делать с ним что-либо, кроме регистрации. . Очередь событий Swing имеет в основном такой же тип поведения.

В качестве альтернативы вы можете предоставить ловушку для «обработчика неперехваченных исключений», подобную ThreadGroup . Имейте в виду, что обработчик может занять много времени и в конечном итоге задержать ваш диспетчер.

Что касается InterruptedException: единственное, что касается этого, - это ваш цикл диспетчеризации, который должен проверять какое-то внешнее состояние, чтобы убедиться, что оно должен прекратить обработку.

1
ответ дан 2 December 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: