`

关于ResourceBundle和PropertyResourceBundle

阅读更多
昨天一个项目,是我的前任发布到服务器上的,有个模块,一直没用到,所以也一直没有看出问题来。直到昨天要用到这个项目的时候,突然报错:
 
java.util.MissingResourceException: Can't find bundle for base name config/para, locale en_US
 
一看代码,这行代码是这么写的:
 
PropertyResourceBundle sys = (PropertyResourceBundle) ResourceBundle.getBundle("config/para", Locale.US);
 
OK,报错的意思,就是找不到config/para这个ResourceBundle,我开始以为是JNDI一类的,于是去找,找了半天一想 不对啊,这个项目没有哪儿有这类东东啊。网上搜索了半天,发现一个问题,就是别的地方用到ResourceBundle.getBundle()的,没有 一个是像我这样带"/"的。
 
无奈,决定去翻javadoc。
 
jdk doc里面,关于ResourceBundle.getBundle()这个方法的说明足足写了两页,大意是,传进来的参数叫baseName,还有一个 是locale,假如baseName是abc,locale是en_US,那么就应该去找一个叫abc_en_US.properties的文件,当然 如果没有找到,就省略一部分,找abc_en.properties等等,如果还是找不到,就找abc.properties,如果还没有,继续模糊匹 配,实在找不到,就扔出MissingResourceException来了。
 
我总不能建一个文件叫config/para_en_US.properties吧……
 
继续找javadoc,在那整整两页的文档最底下,找到了这么一行:
 
The baseName argument should be a fully qualified class name. However, for compatibility with earlier versions, Sun's Java 2 runtime environments do not verify this, and so it is possible to access PropertyResourceBundles by specifying a path name (using "/") instead of a fully qualified class name (using ".").
 
行,我服你了,去人家项目源代码库里面一找,在classes目录下面果然发现一个目录叫config,下面赫然躺着para.properties这么一个文件。拿下来上传,重启,不报错了,问题搞定。
 
也就是说,这个baseName可以是classpath下面的一个路径,最后一行才是bundle名字。而且这是Sun老大为了兼容早期的版本加上的这么一个功能,而且只能是在PropertyResourceBundle这个子类里面用。
分享到:
评论
1 楼 夜里几度惆怅 2012-06-11  

相关推荐

    Xml ResourceBundle简单实现

    Xml ResourceBundle的实现基于Java的`java.util.ResourceBundle`类和`java.util.PropertyResourceBundle`类的扩展。通过创建自定义的ResourceBundle类,我们可以解析XML文件并加载其中的资源。这个过程通常包括以下...

    JDK17-internationalization-guide.pdf

    Java平台提供了多种资源文件管理技术,例如ResourceBundle、PropertyResourceBundle等。 3.2 语言环境设置 语言环境设置是指根据不同的语言和地区,提供相应的语言环境设置的过程。Java平台提供了多种语言环境设置...

    使用J2SE API读取Properties文件的六种方法

    `ResourceBundle`是用于国际化和本地化资源的工具,可以通过`getBundle()`方法加载Properties文件。例如: ```java String name = "config"; ResourceBundle rb = ResourceBundle.getBundle(name, Locale.get...

    Java学习资料-界面设计(Swing)-核心精讲

    通过ResourceBundle和PropertyResourceBundle,你可以轻松地管理和切换不同语言的资源。 总的来说,"Java学习资料-界面设计(Swing)-核心精讲"将引导你从零开始学习如何使用Swing构建美观、功能丰富的图形用户界面...

    Java swing 权威指南

    10. **国际化(Internationalization)**: Swing 支持多语言环境,通过ResourceBundle和PropertyResourceBundle类可以轻松地为不同地区提供本地化字符串。 11. **SwingWorker**: 这是Swing提供的异步执行模型,用于...

    浅析Java swing组件窗体设计.zip

    同时,Swing还支持国际化,通过ResourceBundle和PropertyResourceBundle可以实现多语言切换。 总结,Java Swing提供了一套强大的工具,帮助开发者构建具有丰富交互功能的桌面应用。熟练掌握Swing组件和窗体设计,...

    JAVA SWING 图书管理系统

    通过ResourceBundle和PropertyResourceBundle,可以为不同的语言提供对应的界面文本。 总结,"JAVA SWING 图书管理系统"是一个涵盖了Swing组件使用、MVC设计模式、事件处理、数据库连接以及UI定制等多个方面知识的...

    基于Java语言的控制窗口.zip

    10. **国际化支持**:Java GUI应用可以通过ResourceBundle和PropertyResourceBundle实现多语言支持,使应用更具有普适性。 11. **Swing Timer**:Swing Timer类可以用于周期性的任务执行,如游戏的帧率控制或定时...

    java swing hign级

    8. **国际化(i18n)**:Swing支持多语言应用,通过ResourceBundle和PropertyResourceBundle类可以实现应用程序的国际化,使得不同地区的用户都能使用。 9. **组件的可访问性**:Swing遵循无障碍(Accessibility)...

    读取Properties文件的六种方法

    ResourceBundle resourceBundle = new PropertyResourceBundle(in); System.out.println("Read properties from PropertyResourceBundle: " + resourceBundle); } catch (Exception e) { e.printStackTrace(); ...

    国际化编程

    在Java中,`java.util`包提供了处理国际化问题所需的主要工具,如Locale、ResourceBundle以及它们的子类,如ListResourceBundle和PropertyResourceBundle。这些类共同协作,为开发者提供了处理多语言环境所需的灵活...

    Java加载properties文件的六种方法

    ResourceBundle rb = new PropertyResourceBundle(in); ``` 4. **使用类变量的 `getResourceAsStream()` 方法** 当 `.properties` 文件位于类路径下时,可以使用类的 `getResourceAsStream()` 方法。示例: ```...

    java读取proterties的六种方法

    ResourceBundle rb = new PropertyResourceBundle(in); ``` 4. **使用类变量的 `getResourceAsStream()` 方法**: 如果 Properties 文件位于类路径下,你可以通过类对象的 `getResourceAsStream()` 方法获取输入...

    ButtonDemo:另一个研究项目

    6. **国际化支持**:Swing支持多语言环境,开发者可能利用ResourceBundle和PropertyResourceBundle来实现按钮文本和其他界面元素的国际化。 7. **组件交互**:在ButtonDemo项目中,按钮可能与其他组件(如Label、...

    jwwe学习资料,jwwe学习资料

    ResourceBundle rb = new PropertyResourceBundle(in); ``` 它将`.properties`文件作为资源包来处理,适用于特定格式的属性文件。 ### 4. 使用`class.getResourceAsStream()` 这种方法允许通过类路径访问资源,...

    javaI18N[国际化]

    5. **PropertyResourceBundle和ResourceBundle类**:前者是基于.properties文件的资源包实现,后者是加载和管理资源包的基类。通过ResourceBundle的`getBundle()`静态方法,我们可以根据指定的Locale加载相应的资源...

    Java国际化

    5. **PropertyResourceBundle和ResourceBundle.Control**:`PropertyResourceBundle`是默认的资源束实现,基于.properties文件。`ResourceBundle.Control`则允许自定义资源束的加载策略,比如从其他源(如数据库或...

    管理系统系列--使用Java Swing开发的学生信息管理系统.zip

    8. 国际化支持:为了适应多语言环境,开发者可以使用`ResourceBundle`和`PropertyResourceBundle`进行国际化配置。 9. 事件监听:Swing组件都支持事件监听,开发者需要为按钮、菜单等添加监听器,以便在用户进行...

    Java实现记事本功能

    11. **国际化支持**:如果要使记事本具有多语言支持,可以使用`ResourceBundle`和`PropertyResourceBundle`来加载不同语言的资源文件。 12. **线程处理**:对于耗时的操作,如读写大文件,应使用异步处理以避免阻塞...

Global site tag (gtag.js) - Google Analytics