У меня была похожая проблема, и я оказался на этой странице, потому что не мог понять, почему мое приложение не уловило исключение, которое я выбрасывал.Оказывается, это было по очевидной причине, поэтому я поделюсь.
В моем случае у меня был некоторый код, который получал данные JSON из запроса HTTPS.Это заставило компилятор скулить, и мне пришлось сделать попытку / поймать код, анализирующий JSON.Пока все хорошо.
JSON содержал, помимо прочего, строки версий в произвольном формате, и я хотел сравнить эту строку версии с версией прошивки на устройстве, к которому подключено приложение.Поэтому я создал класс, который берет строку версии и разбирает ее на различные компоненты, а затем использует их в определенном порядке для сравнения.В конструкторе, где я разбираю строку на компоненты, я выкидываю исключение, если строка недопустима.Опять же, это нормально и совершенно нормально.
Ребята, которые работают над прошивкой, говорят мне, что мое приложение вылетает.ОК - надо выяснить почему.Оказывается, они помещают неверную строку версии в прошивку.Хорошо - это нормальноЧто должно произойти, это то, что класс Version генерирует исключение, которое перехватывается моим try / catch, и просто предотвращает логику, связанную со сравнением версий, и не отображает доступное обновление прошивки, что нормально в этой (необычной) ситуации.
После того, как я поразмыслил, почему исключение не перехватывается, я наконец-то понял, что это потому, что мой try / catch перехватывает JSONException, тогда как мой класс Version генерирует RuntimeException.
Итакесли вы не можете понять, почему ваш try / catch не перехватывает исключение, вы думаете, что оно должно перехватить, и вы попадаете сюда, дважды проверьте, с каким типом исключения вы имеете дело, и убедитесь, что у вас есть подходящий тип для перехвата.