0

私はswingguiを使用してJavaで学校用の魚雷ゲームを作成しています。zip形式のソースはこちらをご覧ください。

/ bin / resource / graphics / defaultフォルダーのサブフォルダーに保存されている画像のカスタムボタンアイコンとマウスカーソルを使用します。ルートフォルダーはプログラムのルートフォルダーです(これは、最終的な.jarのルートにもなります)。 「bin」とは別に、すべてのクラスを含む「main」フォルダが含まれています。リソースの相対パスは、MapStruct.javaのshipPath変数とmapPath変数に格納されます。これで、Battlefield.javaのPutPanelクラスはそれらを正常に検出し、ボタンのアイコンを正常に設定しますが、他のすべてのクラスはアイコンを取得できません。たとえば、Table.javaのsetCursorは、選択した船の画像のすべての要素にマウスカーソルを設定する必要があります。またはField.javaのthis.button.setIcon(icon); コンストラクターで、「水」のボタンのアイコンを設定する必要があります。

パスが正しいように見えますが、デバッグで何が起こるかを監視しました。ロード後も画像はnullのままです。また、画像フォルダにテストファイルを書き込もうとしましたが、このメソッドはfilenotfound例外を返します。クラスのパスを取得して、想定された場所から実行されているかどうかを確認しようとしましたが、実行されているように見えるため、現在、問題を見つけることができません。

誰か助けてくれませんか?ありがとうございました。

4

2 に答える 2

2

次のようなアイコンをロードする必要があります。

ClassLoader cl= this.getClass().getClassLoader();
URL imageURL   = cl.getResource("resources/...");
ImageIcon icon = new ImageIcon(imageURL);

また、Eclipseのクラスパスにリソースフォルダーを追加する必要があります。パスはファイルパスではないことに注意してください。この方法では、アプリをjarファイルにバンドルする場合に機能します。

于 2010-04-17T13:49:36.940 に答える
0
btnRegistration.setIcon(createImageIcon("reg.png"));

protected ImageIcon createImageIcon(String path) {
    java.net.URL imgURL = Master.class.getClassLoader().getResource(path);
    if (imgURL != null) {
    return new ImageIcon(imgURL);
    } else {
    System.out.println("Couldn't find file: " + path);
    return null;
    }
}

ここで、btnRegistrationは私のJButtonマスターであり、私のクラスであり、reg.pngは私のプロジェクトに属する私の画像です。

于 2015-12-09T10:32:19.813 に答える