MissingResourceException

MissingResourceException

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

我所有的源文件都在package31中。当在字符串中带有或不带有“ 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");
    }
}

最佳答案

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


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


  AudioClip剪辑=
  Applet.newAudioClip(getClass()。getResource(“ / E31_10 / audio / us.mid”));
      ImageIcon图片=新的ImageIcon(getClass()。getResource(“ / E31_10 / image / us.gif”));

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

您的数组索引contents[3]错误,将导致ArrayIndexOutOfBoundsException,这也将引发误导的MissingResourceException。如果可以在异常堆栈跟踪中找到此异常,则问题出在这里。将其更改为contents [2]将解决此问题。


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

07-26 02:48