昨天一个项目,是我的前任发布到服务器上的,有个模块,一直没用到,所以也一直没有看出问题来。直到昨天要用到这个项目的时候,突然报错:
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 PropertyResourceBundle
s by specifying a path name (using "/") instead of a fully qualified class name (using ".").
行,我服你了,去人家项目源代码库里面一找,在classes目录下面果然发现一个目录叫config,下面赫然躺着para.properties这么一个文件。拿下来上传,重启,不报错了,问题搞定。
也就是说,这个baseName可以是classpath下面的一个路径,最后一行才是bundle名字。而且这是Sun老大为了兼容早期的版本加上的这么一个功能,而且只能是在PropertyResourceBundle这个子类里面用。
分享到:
相关推荐
Xml ResourceBundle的实现基于Java的`java.util.ResourceBundle`类和`java.util.PropertyResourceBundle`类的扩展。通过创建自定义的ResourceBundle类,我们可以解析XML文件并加载其中的资源。这个过程通常包括以下...
Java平台提供了多种资源文件管理技术,例如ResourceBundle、PropertyResourceBundle等。 3.2 语言环境设置 语言环境设置是指根据不同的语言和地区,提供相应的语言环境设置的过程。Java平台提供了多种语言环境设置...
`ResourceBundle`是用于国际化和本地化资源的工具,可以通过`getBundle()`方法加载Properties文件。例如: ```java String name = "config"; ResourceBundle rb = ResourceBundle.getBundle(name, Locale.get...
通过ResourceBundle和PropertyResourceBundle,你可以轻松地管理和切换不同语言的资源。 总的来说,"Java学习资料-界面设计(Swing)-核心精讲"将引导你从零开始学习如何使用Swing构建美观、功能丰富的图形用户界面...
10. **国际化(Internationalization)**: Swing 支持多语言环境,通过ResourceBundle和PropertyResourceBundle类可以轻松地为不同地区提供本地化字符串。 11. **SwingWorker**: 这是Swing提供的异步执行模型,用于...
同时,Swing还支持国际化,通过ResourceBundle和PropertyResourceBundle可以实现多语言切换。 总结,Java Swing提供了一套强大的工具,帮助开发者构建具有丰富交互功能的桌面应用。熟练掌握Swing组件和窗体设计,...
通过ResourceBundle和PropertyResourceBundle,可以为不同的语言提供对应的界面文本。 总结,"JAVA SWING 图书管理系统"是一个涵盖了Swing组件使用、MVC设计模式、事件处理、数据库连接以及UI定制等多个方面知识的...
10. **国际化支持**:Java GUI应用可以通过ResourceBundle和PropertyResourceBundle实现多语言支持,使应用更具有普适性。 11. **Swing Timer**:Swing Timer类可以用于周期性的任务执行,如游戏的帧率控制或定时...
8. **国际化(i18n)**:Swing支持多语言应用,通过ResourceBundle和PropertyResourceBundle类可以实现应用程序的国际化,使得不同地区的用户都能使用。 9. **组件的可访问性**:Swing遵循无障碍(Accessibility)...
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。这些类共同协作,为开发者提供了处理多语言环境所需的灵活...
ResourceBundle rb = new PropertyResourceBundle(in); ``` 4. **使用类变量的 `getResourceAsStream()` 方法** 当 `.properties` 文件位于类路径下时,可以使用类的 `getResourceAsStream()` 方法。示例: ```...
ResourceBundle rb = new PropertyResourceBundle(in); ``` 4. **使用类变量的 `getResourceAsStream()` 方法**: 如果 Properties 文件位于类路径下,你可以通过类对象的 `getResourceAsStream()` 方法获取输入...
6. **国际化支持**:Swing支持多语言环境,开发者可能利用ResourceBundle和PropertyResourceBundle来实现按钮文本和其他界面元素的国际化。 7. **组件交互**:在ButtonDemo项目中,按钮可能与其他组件(如Label、...
ResourceBundle rb = new PropertyResourceBundle(in); ``` 它将`.properties`文件作为资源包来处理,适用于特定格式的属性文件。 ### 4. 使用`class.getResourceAsStream()` 这种方法允许通过类路径访问资源,...
5. **PropertyResourceBundle和ResourceBundle类**:前者是基于.properties文件的资源包实现,后者是加载和管理资源包的基类。通过ResourceBundle的`getBundle()`静态方法,我们可以根据指定的Locale加载相应的资源...
5. **PropertyResourceBundle和ResourceBundle.Control**:`PropertyResourceBundle`是默认的资源束实现,基于.properties文件。`ResourceBundle.Control`则允许自定义资源束的加载策略,比如从其他源(如数据库或...
8. 国际化支持:为了适应多语言环境,开发者可以使用`ResourceBundle`和`PropertyResourceBundle`进行国际化配置。 9. 事件监听:Swing组件都支持事件监听,开发者需要为按钮、菜单等添加监听器,以便在用户进行...
11. **国际化支持**:如果要使记事本具有多语言支持,可以使用`ResourceBundle`和`PropertyResourceBundle`来加载不同语言的资源文件。 12. **线程处理**:对于耗时的操作,如读写大文件,应使用异步处理以避免阻塞...