簡體   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