BlackBerry - глобальный обработчик исключений - PullRequest
1 голос
/ 23 мая 2011

(правка: этот вопрос касается именно BB, из-за странного способа оптимизации исключений. Мне комфортно с обычными шаблонами обработки исключений в J2SE, но BB ведет себя не так, как обычно. В этом случае BB отказываетсятип ошибки и сообщение, а также то, как разработчики BB пытаются решить эту проблему, или если они игнорируют ее.)

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

Я хотел бы описать ошибку немного лучше, отсюда и мой термин «глобальный обработчик ошибок».Нечто похожее на код:

public static void main(String[] args)
{
    try
    {

        FusionApp app = FusionApp.getInstance();
        app.enterEventDispatcher();

    }
    catch (Throwable t)
    {
        // t has lost all type information at this point - this prints "null"
        System.err.println(t.getMessage());
    }
}

Моя непосредственная проблема заключается в том, что когда я ловлю t (в методе main() после вызова app.enterEventDispatcher()), он теряет информацию о своем типе.например, я знаю, что код выдает IllegalArgumentException с пользовательским сообщением - однако в блоке catch это сообщение java.lang.Error с null.

И в трассировке стека (ALT LGLG),сообщение также было потеряно (по крайней мере, трассировка стека является точной).

Итак ... что такое хороший шаблон для использования для реализации какой-либо формы глобальной обработки ошибок на BB?Или это считается плохой идеей на этой платформе?

Считается ли хорошей практикой просто всплывать диалоговое окно с неизвестной ошибкой - мне это не нравится, но, возможно, это путь BB?

1 Ответ

0 голосов
/ 24 мая 2011

Лучшая практика заключается в реализации пользовательской обработки исключений.

Итак, если вы ожидаете перехватить IllegalArgumentException, MyCustomException и StartupException, сначала поместите их в блок catch, а затем добавьте исключение catch (а затем, если хотите, добавьте Throwable catch)

Общее правило - от наиболее исключительного к наиболее распространенному и для исключений того же уровня - от наиболее ожидаемого до наименее ожидаемого.

В случае исключения == null или getMessage () == null вы можетевсегда отображайте что-то вроде «Ошибка приложения, отправьте журнал событий на [support email]», тогда, если у вас есть хорошая регистрация событий в вашем приложении, у вас есть хороший шанс воспроизвести проблему.

И разговоро журнале событий см. EventLogger класс для реализации ведения журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...