ListResourceBundle和MissingResourceException

时间:2012-05-27 21:54:38

标签: java

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

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

Alikas

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");
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

      

    AudioClip clip =   Applet.newAudioClip(的getClass()的getResource( “/ E31_10 /音频/ us.mid”));       ImageIcon image = new ImageIcon(getClass()。getResource(“/ E31_10 / image / us.gif”));

  2. 如果第一个不是问题,则存在第二个问题:

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

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

答案 1 :(得分:0)

您是否正在尝试加载名为“chapter31.Resources”的邮件属性文件?如果是这样,那么在Eclipse中你可以尝试以下方法:

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

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

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

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