Вопрос

Я работаю над кроссплатформенным приложением на Java, которое в настоящее время прекрасно работает в Windows, Linux и macOS X.Я пытаюсь разработать хороший способ обнаружения (и обработки) "сбоев".Есть ли простой кроссплатформенный способ обнаружить "сбои" в Java и что-то сделать в ответ?

Я предполагаю, что под "сбоями" я подразумеваю неперехваченные исключения.Однако код использует некоторый JNI, поэтому было бы неплохо иметь возможность отлавливать сбои из-за плохого кода JNI, но у меня такое чувство, что это специфично для JVM.

Это было полезно?

Решение

Для простой обработки всех данных вы можете использовать следующий статический метод в Нитки.Из Javadoc:

статическая пустота setDefaultUncaughtExceptionHandler - обработчик(Нитки.Необнаруженный обработчик исключений эх)
          Установите обработчик по умолчанию, вызываемый, когда поток внезапно завершается из-за неперехваченного исключения, и никакой другой обработчик не был определен для этого потока.

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

Побочное примечание: Будет лучше, если код сможет перехватывать, регистрировать и / или восстанавливать исключения ближе к источнику проблемы.Я бы зарезервировал этот вид обобщенной обработки сбоев для абсолютно неустранимых ситуаций (т. е.подклассы java.lang.Ошибка).Старайтесь избегать возможности возникновения Исключение RuntimeException никогда не будет полностью перехвачен, поскольку программное обеспечение могло бы - и предпочтительнее - пережить это.

Другие советы

Для обработки неперехваченных исключений вы можете предоставить новую ThreadGroup, которая предоставляет реализацию ThreadGroup.uncaughtException(...).Затем вы можете перехватывать любые неперехваченные исключения и обрабатывать их соответствующим образом (напримеротправьте журнал сбоев домой).

Я не могу помочь вам на фронте JNI, вероятно, есть способ использовать исполняемый файл собственной оболочки перед вызовом JVM, но этому исполняемому файлу нужно будет знать обо всех возможных JVM, которые он мог бы вызывать, и о том, как они указывают на сбои, и где размещаются журналы сбоев и т.д.

Не уверен, что это то, что вам нужно, но вы также можете определить, возникло ли исключение из вашего собственного кода.Видишь http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/functions.html#wp5234 для получения дополнительной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top