繁体   English   中英

ListResourceBundle和MissingResourceException

[英]ListResourceBundle and MissingResourceException

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

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

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

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

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

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

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

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

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

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

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

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

如果仍然无法解决问题,您可以尝试将文件的完整路径传递给ResourceBundle.getResource()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM