Java 如何使用ResourceBundle
我试图掌握java应用程序的内部化,如图所示。但是我不能。我创建了一个类,它像前面所说的那样扩展了Java 如何使用ResourceBundle,java,swing,netbeans,internationalization,resourcebundle,Java,Swing,Netbeans,Internationalization,Resourcebundle,我试图掌握java应用程序的内部化,如图所示。但是我不能。我创建了一个类,它像前面所说的那样扩展了ListResourceBundle,并尝试检索键。不过,我一直有个例外。如果您查看教程,它会说使用.class文件。这不可能是对的,不是吗 [项目树] [源代码] 这里是我正在使用的两个类,只是MainWindow_xx_xx.java文件中的一个,因为它们基本相同。 首先是ListResourceBundle: public class MainWindow_en_US extends Lis
ListResourceBundle
,并尝试检索键。不过,我一直有个例外。如果您查看教程,它会说使用.class文件。这不可能是对的,不是吗
[项目树]
[源代码]
这里是我正在使用的两个类,只是MainWindow_xx_xx.java文件中的一个,因为它们基本相同。
首先是ListResourceBundle:
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"}
};
}
现在我使用的加载方法是:
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的极其简单的教程正常工作
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)
线程“AWT-EventQueue-0”java.util.MissingResourceException中的异常:找不到基本名称MainWindow、区域设置es的捆绑包
位于java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499)
位于java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322)
位于java.util.ResourceBundle.getBundle(ResourceBundle.java:796)
at-.-.-.-.-.(MainWindow.java:37)
在-.-.-.-.MainWindow$2.run(MainWindow.java:145)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)中
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
在java.awt.EventQueue.access$000(EventQueue.java:102)
在java.awt.EventQueue$3.run(EventQueue.java:662)
在java.awt.EventQueue$3.run(EventQueue.java:660)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)中
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:151)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
位于java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
您需要使用完全限定的基本名称:
bundle = ResourceBundle.getBundle("pkg.subpkg.resources.MainWindow", locale);
无法命名文件
main窗口\u es\u es
。要解决问题,请将文件重命名为mains
Locale locale = new Locale("es");
ResourceBundle rb = ResourceBundle.getBundle("yourPackageName.MainWindow", locale);
System.out.print(rb.getObject("YourKey"));
这有助于我在
msgfmt
命令中正确指定pkg.subpkg.resources.main窗口。i、 e.命令是msgfmt--java2-d source/folder/root/-r pkg.subpkg.resources.main window my/po/file.po