2

ResourceBundle のロードを含むプロジェクトに取り組んでいます。より明確に言えば、ListResourceBundle を拡張するクラスを作成しました。このクラスは Resources.java と呼ばれます。それは問題なくコンパイルされますが、クラスをロードしようとするたびに MissingResourceException がポップアップし続けます。

すべてのソース ファイルは、chapter31 パッケージにあります。文字列に「chapter31」が含まれているかどうかにかかわらず、この呼び出しを行うと、常に MissingResourceException が発生します。私のIDEはEclipseです。私はこの 1 つの問題を 2 日間いじっています。Eclipseのバージョンを変更してみました。私はロープの終わりにいます。getBundle() メソッドがクラスを認識できるようにするには、Eclipse で何ができますか。どうすればそれを見逃すことができるのかわかりません。同じパッケージに入っています!お知らせ下さい。

アリカス

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");
    }
}
4

2 に答える 2

1

ここで MissingResourceException は誤解を招きます。この問題は、他の 2 つの問題が原因である可能性があります。

  1. 次の 2 行のリソースが見つかりません。

    AudioClip クリップ = Applet.newAudioClip(getClass().getResource("/E31_10/audio/us.mid")); ImageIcon image = new ImageIcon(getClass().getResource("/E31_10/image/us.gif"));

  2. 最初の問題ではない場合、2 番目の問題があります。

    間違った配列インデックスcontents[3]がありArrayIndexOutOfBoundsException、これにより誤解を招くような MissingResourceException がスローされます。例外スタック トレースでこの例外が見つかる場合、問題はここにあります。content[2] に変更すると問題が解決します。

注: MissingResourceException が表示される理由は、最終的には、上記の問題によりクラス ローダーが Resources クラスのインスタンスを作成できないことが原因です。コンテンツ配列の初期化コードをコンストラクターではなく別のメソッドに配置した場合、オブジェクトの初期化フェーズでこの例外が発生しない可能性があります。もちろん、後で getObject メソッドを呼び出そうとすると、他の例外が発生します。

于 2012-05-28T02:33:01.477 に答える
0

「chapter31.Resources」というメッセージプロパティファイルを読み込もうとしていますか?もしそうなら、Eclipseで以下を試すことができます:

  • 「デバッグ構成...」をクリックします
  • リソースのメインメソッドを実行するために使用しているランチャーを見つけます
  • [クラスパス]タブをクリックします
  • 「ユーザーエントリ」をクリックし、「詳細」ボタンをクリックします
  • 「外部フォルダの追加」を選択し、「chapter31.Resources」フォルダを選択します。

ResourceBundle.getBundle()メソッドは、クラスパスでファイルを探しています。このファイルがクラスパスにない場合、ファイルを見つけることができません。

上記の手順により、「chapter31.Resources」というフォルダーがクラスパスに追加されます。

それでも機能しない場合は、ファイルのフルパスをResourceBundle.getResource()に渡してみてください。

于 2012-05-27T22:07:40.140 に答える