Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Exception


Автор: LAKERS 4.5.2006, 14:16
нужно следующее: если ошибка формата java.lang.NullPointerException , то вывести сообщение по русски "Ошибка ...(такая-то) " если ошибка java.io.FileNotFoundException, то вывести сообщение об этой ошибке....как это сделать?
Код
try
{...}
catch (Exception e)
{
     if (???)
    {
    ???????????
    }
}
 

Автор: allex 4.5.2006, 14:32
LAKERS, завести Map, положить туда пары: класс ошибки -> строка. Ну и выбирать потом.  

Автор: ShamanTrirukiy 4.5.2006, 14:35
Обычно исключения обрабатывают так:
Код

try{
  ...
}catch (java.lang.NullPointerException npe){
  //вывести сообщение по русски "Ошибка ...(такая-то) 
}catch (java.io.FileNotFoundException fnfe){
  //вывести сообщение об этой ошибке
}catch(Exception e){
  //обработка остальных исключений, если таковые имеются
}
 
 

Автор: ALKS 4.5.2006, 14:55
стандартные исключения по-моему можно изначально локализовать на уровне jre. у меня они например все на немецком сыпяться.  если на немецком можно, то и на русском тоже должно палить и без всякого специального кода 

Автор: LAKERS 5.5.2006, 09:03
Цитата(ALKS @  4.5.2006,  14:55 Найти цитируемый пост)
стандартные исключения по-моему можно изначально локализовать на уровне jre. у меня они например все на немецком сыпяться.  если на немецком можно, то и на русском тоже должно палить и без всякого специального кода

и каким образом с русским это провернуть можно?
 

Автор: ShamanTrirukiy 5.5.2006, 11:05
Цитата(LAKERS @  5.5.2006,  09:03 Найти цитируемый пост)
и каким образом с русским это провернуть можно

поидее, если пойман, например, Exception e, то e.getLocalizedMessage() должен вернуть сообщение на языке, установленном by default. 

Автор: ALKS 5.5.2006, 18:23
Код

public String getLocalizedMessage() {
        return getMessage();
    }


этот код из класса Throwable smile
если вы еще не поняли мы в анусе. локализировать классы исключения можно только в наследниках путем оverride этой функции.
но уже имеющиеся дефолтные исключения так локализировать не удасться. ибо они изначально не поддерживают локализированный метод.... 


В догонку- начитался массу ругани по этому поводу в нете smile 

Автор: ShamanTrirukiy 6.5.2006, 12:22
Цитата(ALKS @  5.5.2006,  18:23 Найти цитируемый пост)
если вы еще не поняли 

Еще как понял. Приношу свои извинения за сказанную глупость. Просто где-то читал данное изречение, сам работаю с английским, а исходники не посмотрел smile 
ALKS, спасибо за науку - в следующий раз буду аккуратней. 

P.S. Сори за оффтоп  

Автор: ALKS 6.5.2006, 12:54
ндя... собственно как выясняеться в API Doc класса Throwable( http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Throwable.html#getLocalizedMessage() ) прямо написано:

public String getLocalizedMessage()
Creates a localized description of this throwable. Subclasses may override this method in order to produce a locale-specific message. For subclasses that do not override this method, the default implementation returns the same result as getMessage().
RTFM и нефиг в исходниках ковыряться...

кстати очень познавательная серия статей по теме:
http://www.javaworld.com/javaworld/jw-08-2001/jw-0803-exceptions.html?
 

Автор: ShamanTrirukiy 6.5.2006, 13:12
Цитата(ShamanTrirukiy @  6.5.2006,  12:22 Найти цитируемый пост)

Еще как понял.

Честное слово, читать умею. 
Цитата(ALKS @  6.5.2006,  12:54 Найти цитируемый пост)
нефиг в исходниках ковыряться

В исходниках тоже есть комментарии 
Цитата

Код

/**
     * Creates a localized description of this throwable.
     * Subclasses may override this method in order to produce a
     * locale-specific message.  For subclasses that do not override this
     * method, the default implementation returns the same result as
     * <code>getMessage()</code>.
     *
     * @return  The localized description of this throwable.
     * @since   JDK1.1
     */

 и смотреть их очень даже полезно, но я 
Цитата(ShamanTrirukiy @  6.5.2006,  12:22 Найти цитируемый пост)
исходники не посмотрел

P.S. Еще раз сори за оффтоп.
P.P.S. Также очень многое по этому поводу есть у С.Стелтинга в Java без сбоев. Обработка исключений, тестирование, отладка - книга от Sun Microsystems, НЯМС очень полезная...
  

Автор: ShamanTrirukiy 6.5.2006, 13:30
Так вот, тот самый Стелтинг советует при локализации Exception-а использовать Locale. Смотрим исходники и наблюдаем там следующий перечень языков, поддерживаемых при локализации:
Цитата

Код

/** Useful constant for language.
     */
    static public final Locale ENGLISH = new Locale("en","","");

    /** Useful constant for language.
     */
    static public final Locale FRENCH = new Locale("fr","","");

    /** Useful constant for language.
     */
    static public final Locale GERMAN = new Locale("de","","");

    /** Useful constant for language.
     */
    static public final Locale ITALIAN = new Locale("it","","");

    /** Useful constant for language.
     */
    static public final Locale JAPANESE = new Locale("ja","","");

    /** Useful constant for language.
     */
    static public final Locale KOREAN = new Locale("ko","","");

    /** Useful constant for language.
     */
    static public final Locale CHINESE = new Locale("zh","","");

    /** Useful constant for language.
     */
    static public final Locale SIMPLIFIED_CHINESE = new Locale("zh","CN","");

    /** Useful constant for language.
     */
    static public final Locale TRADITIONAL_CHINESE = new Locale("zh","TW","");

    /** Useful constant for country.
     */
    static public final Locale FRANCE = new Locale("fr","FR","");

    /** Useful constant for country.
     */
    static public final Locale GERMANY = new Locale("de","DE","");

    /** Useful constant for country.
     */
    static public final Locale ITALY = new Locale("it","IT","");

    /** Useful constant for country.
     */
    static public final Locale JAPAN = new Locale("ja","JP","");

    /** Useful constant for country.
     */
    static public final Locale KOREA = new Locale("ko","KR","");

    /** Useful constant for country.
     */
    static public final Locale CHINA = new Locale("zh","CN","");

    /** Useful constant for country.
     */
    static public final Locale PRC = new Locale("zh","CN","");

    /** Useful constant for country.
     */
    static public final Locale TAIWAN = new Locale("zh","TW","");

    /** Useful constant for country.
     */
    static public final Locale UK = new Locale("en","GB","");

    /** Useful constant for country.
     */
    static public final Locale US = new Locale("en","US","");

    /** Useful constant for country.
     */
    static public final Locale CANADA = new Locale("en","CA","");

    /** Useful constant for country.
     */
    static public final Locale CANADA_FRENCH = new Locale("fr","CA","");


Так что то, что 
Цитата(ALKS @  4.5.2006,  14:55 Найти цитируемый пост)
у меня они например все на немецком сыпяться.

вполне логично, а вот насчет
Цитата(ALKS @  4.5.2006,  14:55 Найти цитируемый пост)
то и на русском тоже должно палить и без всякого специального кода 

ты не прав - тут надо ручками...
  

Автор: ALKS 6.5.2006, 14:19
не на немецком у меня ничего не работает наврал. немецкие сообщения сыпер АрpServer а не сама Java, да и то не все. Видно АрpServer чего-то перехватил и локализовал а чего-то нет.  

Автор: LSD 7.5.2006, 12:22
Цитата(ShamanTrirukiy @  6.5.2006,  14:30 Найти цитируемый пост)
Так вот, тот самый Стелтинг советует при локализации Exception-а использовать Locale. Смотрим исходники и наблюдаем там следующий перечень языков, поддерживаемых при локализации:

Это просто список наиболее часто употребляемых констант для локалей, а полный список можно получить так: Locale.getAvailableLocales().

По поводу ошибок, Java ошибки не локализует. За исключением некоторых специфичных случаев, типа FileNotFoundException, но там уже дается то сообщение которое выдала ОС и это заслуга не JVM. Некоторые драйвера JDBC локализуют свои сообщения об ошибках. Считается что Exception-ы предназначены для программиста, а не пользователя, а как их обработать и отобразить пользователю, это уже дело программиста.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)