我正在从事一个涉及加载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方法时会弹出其他异常。