为什么java.util.Currency.getDisplayName()返回null

时间:2013-09-09 14:33:20

标签: java tomcat

我有一个使用此课程的应用程序:java.util.Currency

在应用程序中,我将国家/地区代码映射到区域设置。我通过传入国家/地区代码来检索语言环境

当我将此区域设置传递给Currency.getInstance()时,它会返回正确的货币。我通过调用Currency.getCurrencyCode()

验证了这一点

但是,当我在同一货币实例上调用getDisplayName()时,它会返回null

这种行为不会发生在我的开发计算机上,只发生在我的测试服务器上

我的开发机器和服务器都使用Ubuntu 12.04 LTS:

java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

应用程序在tomcat中运行

我可能会遗漏一些东西

修改

import java.util.Currency;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

...

public static Map<String, Locale> COUNTRY_TO_LOCALE_MAP;

public static void initCountryToLocaleMap() {
    if (COUNTRY_TO_LOCALE_MAP != null) {
        return;
    }

    COUNTRY_TO_LOCALE_MAP = new HashMap<String, Locale>();

    Locale[] locales = Locale.getAvailableLocales();

    for (Locale l : locales) {
        COUNTRY_TO_LOCALE_MAP.put(l.getCountry(), l);
    }
}

public static Locale getLocaleFromCountryCode(String countryCode) {
    if (countryCode == null) {
        return null;
    }

    initCountryToLocaleMap();

    Locale locale = COUNTRY_TO_LOCALE_MAP.get(countryCode);

    if (locale == null) {
        return new Locale("", countryCode);
    }

    return locale;
}

public static void main(String args[]) {
    initCountryToLocaleMap();

    String countryCode = "ZA";
    Locale locale = getLocaleFromCountryCode(countryCode);
    Currency currency = Currency.getInstance(locale);

    System.out.println("currencyCode: " + currency.getCurrencyCode());
    System.out.println("displayName: " + currency.getDisplayName());
}

运行main()后,我得到以下输出: 来自开发机器:

currencyCode: ZAR
displayName: South African Rand

来自测试服务器:

currencyCode: ZAR

2 个答案:

答案 0 :(得分:0)

Currency类的javadoc表示方法getDisplayName()是Java 1.7版本中的新增功能。尝试使用JDK 1.7版运行Tomcat。

如果Tomcat只是默默地失败并返回null,我会感到惊讶。您是否签入了Tomcat日志以查看是否存在异常?

答案 1 :(得分:0)

您正在致电:

Locale.getAvailableLocales();

使用COUNTRY_TO_LOCALE_MAP键将country地图填充为Locale,将值设为country

问题是世界上所有国家/地区之间都没有一对一的映射。,例如您将在列表中获得许多空ZA的本地条目。由于该行为,您将多次向地图中插入一个空键。

是的,你正在查找的国家{{1}}也没有被退回。这就是你返回null的原因。

区域设置实际上代表区域。它们用于标记语言,货币等内容。