无法使用ResourceBundle.getBundle()加载ResourceBundle无法找到基本名称的包,locale en_US

时间:2016-03-14 13:56:07

标签: java javafx-8 maven-3 resourcebundle fxmlloader

当我尝试加载属性文件时,我看到异常Caused by: java.util.MissingResourceException: Can't find bundle for base name /fontawesome/fontawesome, locale en_US。 我正在使用maven项目,我的属性文件位于src \ main \ resources \ fontawesome \ fontawesome.properties

我使用以下代码从Javafx8主文件加载此文件。

FXMLLoader fxmlLoader = new FXMLLoader();           
fxmlLoader.setResources(ResourceBundle.getBundle("/fontawesome/fontawesome.properties"));

我也试过给出文件的绝对路径,但仍无法找到。 还尝试将文件命名为fontawesome_en_US.properties和fontawesome_en.properties,如其他一些SO帖子中所建议的那样。 有人可以帮我找到我在这里做错了什么吗?

4 个答案:

答案 0 :(得分:0)

不要包含.properties扩展名。

ResourceBundle尝试从当前类路径加载属性文件。

如果属性存储在子目录中,请使用“。”而不是“/".

ResourceBundle.getBundle("fontawesome.fontawesome")

答案 1 :(得分:0)

您的语言属性文件应以 _en 结尾,因此在您的情况fontawesome_en.properties中,您应该使用ResourceBundle.getBundle("fontawesome.fontawesome")加载它。

答案 2 :(得分:0)

必须在pom.xml中包含属性文件,这样才能解决问题。

<resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.fxml</include>
                    <include>**/*.css</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>

答案 3 :(得分:0)

这是我的经验: 如果你输入一个“.”在名称中,ResourceBundle.getBundle() 将寻找一个类而不是属性文件。该类看起来像这样:

导入 java.util.ListResourceBundle;

public class DataEncryptionStrings extends ListResourceBundle {
@Override
protected Object[][] getContents() {
    return new Object[][] {
        {"ErrorCreateKeystoreInstance", "an exception occurred creating the keystore instance"},
        {"ErrorLoadInitialKeystore", "an exception occurred loading the initial keystore"},
        {"ErrorLoadKeystore", "an exception occurred loading the keystore"},

它遵循命名约定:
{classname}.class 是默认类
{classname}_en_US.class 是美国英语班
{classname}_fr_FR.class 法语课

如果你没有任何“.”在名称中但有一个“/”,然后它会查找属性文件。

如果您没有“。”如果名称中包含“/”,我认为属性文件或 ListResourceBundle 都可以使用。它会找到您提供的任何内容。不过,我不确定所有 VM 的行为是否都相同。

使我对寻找解决方案感兴趣的问题是我的文件名中包含“.”。我很确定我的问题是我实现了属性文件而不是 ListResourceBundle 类,并且文件名包含“。”在其中,ResourceBundle.getBundle(name) 寻找 ListResourceBundle 类。当我替换“。”在带有“_”的文件名中,我能够找到默认的 ResourceBundle 属性文件。

User68883 似乎在使用绝对地址“/fontawesome/fontawesome.properties”而不是相对地址“fontawesome/fontawesome.properties”。此外,在 ResourceBundle.getBundle 上,永远不要在名称或区域设置中包含文件扩展名。这就是 ResouceBundle 在经过解析过程以获取设备区域设置的资源目录中拥有的最佳资源时自动为您做的事情。