3

当我尝试加载属性文件时看到以下异常:

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.propertiesor fontawesome_en.properties(如其他 SO 帖子中所建议)也是如此。

4

4 回答 4

3

必须在以下文件中包含.properties文件pom.xml

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.fxml</include>
            <include>**/*.css</include>
            <include>**/*.properties</include>
        </includes>
    </resource>
</resources>
于 2016-03-14T14:18:13.840 回答
0

不要包含 .properties 扩展名。

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

如果属性存储在子目录中,请使用“.” 代替 ”/”。

ResourceBundle.getBundle("fontawesome.fontawesome")
于 2016-03-14T14:03:08.457 回答
0

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

于 2016-03-14T14:12:34.137 回答
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 都可以使用。它会找到你提供的任何东西。我不确定所有虚拟机的行为是否相同。

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

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

于 2021-03-20T03:34:41.397 回答