我正在开发一个涉及加载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");
}
}
答案 0 :(得分:1)
MissingResourceException在这里有误导性。您的问题可能是由另外两个问题引起的:
找不到以下两行中的资源:
AudioClip clip = Applet.newAudioClip(的getClass()的getResource( “/ E31_10 /音频/ us.mid”)); ImageIcon image = new ImageIcon(getClass()。getResource(“/ E31_10 / image / us.gif”));
如果第一个不是问题,则存在第二个问题:
你有一个错误的数组索引contents[3]
会导致ArrayIndexOutOfBoundsException
,这也会导致误导的MissingResourceException被抛出。如果您可以在异常堆栈跟踪中找到此异常,那么您的问题就在这里。将其更改为内容[2]将解决问题。
注意:您看到MissingResourceException的原因最终是由于类加载器由于上面指出的问题而无法创建Resources类的实例。如果您已将内容数组初始化代码放在单独的方法而不是构造函数中,则可能无法在对象初始化阶段获得此异常。当然,稍后当您尝试调用getObject方法时会弹出其他异常。
答案 1 :(得分:0)
您是否正在尝试加载名为“chapter31.Resources”的邮件属性文件?如果是这样,那么在Eclipse中你可以尝试以下方法:
ResourceBundle.getBundle()方法正在查找类路径中的文件。如果此文件不在您的类路径中,它将无法找到它。
上面的步骤将“chapter31.Resources”文件夹添加到您的类路径中。
如果这仍然不起作用,您可以尝试将文件的完整路径传递给ResourceBundle.getResource()。