首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ResourceBundle

如何使用ResourceBundle
EN

Stack Overflow用户
提问于 2013-01-22 17:10:33
回答 2查看 22.9K关注 0票数 8

我试图掌握java应用程序的内部化,如这里所示。但我做不到。我已经创建了一个类,它像声明的那样扩展了ListResourceBundle,并试图检索密钥。不过我总有个例外。如果您查看本教程,它会说要使用.class文件。这不可能是对的,对吧?

项目树

源代码

下面是我使用的两个类,它们只是MainWindow_xx_XX.java文件中的一个,因为它们基本上是相同的。首先,ListResourceBundle:

代码语言:javascript
复制
public class MainWindow_en_US extends ListResourceBundle {

    @Override
    protected Object[][] getContents() {
        return contents;
    }
    private Object[][] contents = {
        {"fileLabel", "File"},
        {"newSessionLabel", "New session..."},
        {"openSessionLabel", "Open session..."},
        {"saveLabel", "Save"},
        {"exitLabel", "Exit"},
        {"editLabel", "Edit"},
        {"toolsLabel", "Tools"},
        {"helpLabel", "Help"}
    };
}

现在我用来加载它的方法是:

代码语言:javascript
复制
    private static final int DEFAULT_LOCALE = 0;
    private ResourceBundle bundle;
    public static Locale locale;
    public static final Locale[] supportedLocales = {
        new Locale("en", "US"),
        new Locale("es", "ES")
    };

public MainWindow() {
    for (Locale i : supportedLocales) {
        if (i.getLanguage().equals(Locale.getDefault().getLanguage())) {
            locale = i;
            break;
        } else {
            locale = supportedLocales[DEFAULT_LOCALE];
        }
    }
    bundle = ResourceBundle.getBundle("MainWindow", locale); //EXCEPTION POINTS HERE!!!
    initComponents();
}

我一直有下面的例外。我知道我可以通过属性文件来完成这个任务,但是它让我感到很困扰,因为我无法让Oracle的极其简单的教程开始工作。

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" java.util.MissingResourceException: Can't find bundle for base name MainWindow, locale es_ES
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:796)
    at -.-.-.-.-.<init>(MainWindow.java:37)
    at -.-.-.-.MainWindow$2.run(MainWindow.java:145)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
    at java.awt.EventQueue.access$000(EventQueue.java:102)
    at java.awt.EventQueue$3.run(EventQueue.java:662)
    at java.awt.EventQueue$3.run(EventQueue.java:660)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
EN

回答 2

Stack Overflow用户

发布于 2013-01-22 17:39:45

您需要使用完全限定的基本名称:

代码语言:javascript
复制
bundle = ResourceBundle.getBundle("pkg.subpkg.resources.MainWindow", locale);
票数 13
EN

Stack Overflow用户

发布于 2014-04-30 16:20:38

您不能命名文件MainWindow_es_ES。若要解决问题,请将文件重命名为MainWindow es

代码语言:javascript
复制
Locale locale = new Locale("es");
ResourceBundle rb = ResourceBundle.getBundle("yourPackageName.MainWindow", locale);   
System.out.print(rb.getObject("YourKey"));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14464153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档