Java Calendar.getInstance方法未加载用户定义的区域设置类

Java Calendar.getInstance方法未加载用户定义的区域设置类,java,calendar,locale,Java,Calendar,Locale,在jdk6中 我已经为locale(en,AT)实现了CalendarData_en_AT类,该语言环境是用户定义的语言环境(未在jre中定义)。我看到,当我尝试使用Calendar.getInstance()方法加载区域设置时,它会加载CalendarData\u en.class 当进一步调试时,我发现它只拾取在LocaleMetaDataInfo类中指定的区域设置 当我们调用Calendar.getInstance(新语言环境(en,AT))时,需要做些什么才能加载CalendarData

在jdk6中

我已经为locale(en,AT)实现了CalendarData_en_AT类,该语言环境是用户定义的语言环境(未在jre中定义)。我看到,当我尝试使用
Calendar.getInstance()
方法加载区域设置时,它会加载
CalendarData\u en.class

当进一步调试时,我发现它只拾取在
LocaleMetaDataInfo
类中指定的区域设置

当我们调用
Calendar.getInstance(新语言环境(en,AT))
时,需要做些什么才能加载
CalendarData\u en\u AT.class

代码如下:

我有一个类
CalendarData\u en\u AT.java

public class CalendarData_en_AT extends LocaleNamesBundle{

    public CalendarData_en_AT(){
    }

    protected final Object[][] getContents(){
        return
            new Object[][] { 
                new Object[] { "firstDayOfWeek", "2" },
                new Object[] { "minimalDaysInFirstWeek", "4" }
            };
    }
}
编译后的类被封装在一个.jar文件中,并被放置在jre/lib/ext中

现在是我的测试课

如果我调用
Calendar.getInstance(新语言环境(“en”,“AT”)).getFirstDayOfWeek()


它应该返回2,但现在它返回1,原因是它加载了由用户实现的
CalendarData\u en.class提供的
CalendarData\u en.class
,而不是
CalendarData\u en\u AT.class
。 您必须创建符合区域设置敏感服务SPI的提供程序


查看Sun员工提供的有关创建和打包此类提供程序的更多详细信息

我已经为用户定义的区域设置实现了Sun.util.resources.CalendarData\u en\uu、Sun.util.resources.CurrencyNames\u en\uu、Sun.util.resources.FormatData\u en\u*类,实现的CurrencyNameProvider调用sun.util.resources.CurrencyNames_en_*类,实现的DecimalFormatSymbolsProvider调用sun.util.resources.FormatData_en_*类,但找不到可以调用sun.util.resources.CalendarData_en_*类的提供程序