2

我正在做一个涉及加载 ResourceBundle 的项目。更明确地说,我创建了一个扩展 ListResourceBundle 的类。该类称为 Resources.java。它编译得很好,一切正常,但是每次我尝试加载类时,MissingResourceException 都会不断弹出:

我所有的源文件都在包 chapter31 中。在字符串中使用或不使用“chapter31”进行此调用时,始终会导致 MissingResourceException。我的 IDE 是 Eclipse。这两天我一直在玩这个问题。我什至尝试更改 Eclipse 的版本。我已经走到尽头了。在 Eclipse 中我可以做些什么来确保 getBundle() 方法可以看到该类。我不知道它怎么会错过它。它在同一个包中!请指教。

阿利卡斯

package chapter31;

import java.applet.Applet;
import java.applet.AudioClip;
import java.util.ListResourceBundle;
import java.util.ResourceBundle;

import javax.swing.ImageIcon;

public class Resources extends ListResourceBundle {
    Object contents[][];

    public Resources() {
        AudioClip clip = Applet.newAudioClip(getClass().getResource("/E31_10/audio/us.mid"));
        ImageIcon image = new ImageIcon(getClass().getResource("/E31_10/image/us.gif"));
        contents = new Object[3][2];
        contents[0] = new Object[] {"clip", clip};
        contents[1] = new Object[] {"icon", image};
        contents[3] = new Object[] {"delay", new Integer(68000)};
    }

    protected Object[][] getContents() {
        return contents;
    }

    public static void main(String[] args) {
        ResourceBundle res = ResourceBundle.getBundle("chapter31.Resources");
    }
}
4

2 回答 2

1

MissingResourceException 在这里具有误导性。您的问题可能是由其他两个问题引起的:

  1. 找不到以下两行的资源:

    AudioClip 剪辑 = Applet.newAudioClip(getClass().getResource("/E31_10/audio/us.mid")); ImageIcon image = new ImageIcon(getClass().getResource("/E31_10/image/us.gif"));

  2. 如果第一个不是问题,那么还有第二个问题:

    你有一个错误的数组索引contents[3],这会ArrayIndexOutOfBoundsException导致错误的 MissingResourceException 被抛出。如果您可以在异常堆栈跟踪中找到此异常,那么您的问题就在这里。将其更改为 contents[2] 将解决问题。

注意:您看到 MissingResourceException 的原因最终是由于上述问题导致类加载器无法创建 Resources 类的实例。如果您将内容数组初始化代码放在单独的方法而不是构造函数中,则在对象初始化阶段可能不会出现此异常。当然,稍后尝试调用 getObject 方法时会弹出其他异常。

于 2012-05-28T02:33:01.477 回答
0

您是否尝试加载名为“chapter31.Resources”的消息属性文件?如果是这样,那么在 Eclipse 中,您可以尝试以下操作:

  • 点击“调试配置...”
  • 找到您用于执行资源的主要方法的启动器
  • 单击类路径选项卡
  • 单击“用户条目”,然后单击“高级”按钮
  • 选择“添加外部文件夹”并选择文件夹“chapter31.Resources”。

ResourceBundle.getBundle() 方法正在您的 classpath 中查找文件。如果此文件不在您的类路径中,它将无法找到它。

上述步骤将“chapter31.Resources”文件夹添加到您的类路径中。

如果这仍然不起作用,您可以尝试将文件的完整路径传递给 ResourceBundle.getResource()。

于 2012-05-27T22:07:40.140 回答