1

まず第一に、スタック オーバーフロー (および有能なフォーラムのような Web サイト) の「最初に検索し、最後に質問する」というポリシーを認識しており、宿題をして、問題の解決策を見つけるためにさまざまな情報源を検索しました。とはいえ、適切な答えが見つからなかった私は、この問題を個人的に尋ねるしかありませんでした。

特に Java 言語に関しては、ある程度のプログラミング スキルを持っています。デフォルトの Java SE JDK を使用してこの 2D ゲームに取り組んでいます。より具体的にはJDK 7u4。このプロジェクトには、ほとんどの I/O 操作を管理するクラスがあります。そのメソッドの 1 つは、ファイルへのパスを返します。

public static URL load(String resource) {
    return ZM.class.getResource(resource);
}

現在、この方法は、Netbeans (バージョン 7.1) でプロジェクトを実行するときに問題なく機能します。ただし、プロジェクトをビルドしてクリーニングすると、結果の .jar ファイルは作成者と一致しないようです。コマンド ラインで .jar を実行すると、JVM が .jar をキャッチしましたNullPointerException。.jar 内でファイルを読み取れなかったようです。プログラマーの本能に従って、プロジェクトのデバッグを開始しました。私の最初の試みは、loadメソッドが障害のあるメンバーであるかどうかを確認することでした。いくつかのテストを実行したところ、いくつかの興味深い結果が得られました。

メソッドの引数として「ZM.class」を使用して Netbeans でアプリケーションを実行すると、以下が返されました。

/D:/Projects/GeometryZombiesMayhem/build/classes/geometryzombiesmayhem/ZM.class

しかし、.jar ファイルから実行すると、以下が返されました。

file:/D:/Projects/GeometryZombiesMayhem/dist/GeometryZombiesMayhem.jar!/geometryzombiesmayhem/ZM.class

当然、最初のfile:文字列を削除してみました。無効。次に、 からエクスクラメーション マークを取得してみました[...].jar![...]。繰り返しますが、何もありません。パスから可能なすべての順列を削除しようとしました。運がない。

独自の .jar ファイルに対してメソッドをテストすると、問題なく動作しました。今、ファイルの内部にアクセスしようとすると、アクセスできません。このプロジェクトの以前のバージョンでは、問題なく機能していました。何が起こっているのかよくわかりません。どんな助けでも大歓迎です。

前もってありがとう、レナート

4

2 に答える 2

1

jarファイルからリソースをロードするとき、私は常にclassLoaderを使用していました。IDE内から実行する場合でも、実行可能jarファイルを起動する場合でも、JNLPを使用してWebサイトからプログラムを実行する場合でも、すべてが同じように機能するようです。

代わりに、次の方法でリソースをロードしてみてください。

 try {
      ClassLoader cl = ZM.getClass().getClassLoader();     
      ImageIcon img  = new ImageIcon(cl.getResource("images/programIcon.jpg"));
      // do stuff with img.
 }
 catch(Exception failed) {
     System.out.println(failed);
 }

もう1つの提案-リソース用に別のフォルダーを作成する必要があります。上記の例では、imagesはsrcフォルダー内のフォルダーです。このようにすると、ビルド時に自動的にjarの一部になりますが、リソースをソースコードとは別に保持しています。

于 2012-05-20T02:51:01.770 に答える
0

あなたの問題はあなたのjarファイルから画像をロードすることにあると思います。

これが私がそれをする方法です

URL imageurl = Myclassanme.class.getResource("/test/Ergophobia.jpg"); 
Image myPicture = Toolkit.getDefaultToolkit().getImage(imageurl);
JLabel piclabel = new JLabel(new ImageIcon( myPicture ));
piclabel.setBounds(0,0,myPicture.getWidth(null),myPicture.getHeight(null));

このようにして、「test」パッケージ内のErgophobia.jpgファイルを取得できます。

于 2012-08-22T03:48:48.560 に答える