如何使用ResourceBundle

我正在尝试掌握java应用程序的内部化,如下所示。 我不能。 我创建了一个扩展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(); } 

我一直得到以下exception。 我知道我可以通过属性文件来实现它,但它让我无法理解我无法获得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 -.-.-.-.-.(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) 

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

 bundle = ResourceBundle.getBundle("pkg.subpkg.resources.MainWindow", locale); 

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

 Locale locale = new Locale("es"); ResourceBundle rb = ResourceBundle.getBundle("yourPackageName.MainWindow", locale); System.out.print(rb.getObject("YourKey"));