2

これは非常に一般的なエラーです。これに関するスレッドがたくさんあるためですが、私の状況がすべてのスレッドとわずかに異なるため、解決策が機能しないかどうかはわかりません。

基本的に、私は日食にいます。src という名前のソース フォルダーがあり、3 つのフォルダーにまたがるパッケージがあり、その次に問題のクラスがあります。クラスは次のコードを使用します。

BufferedImage im = ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream(filenames[x].concat(extension)));

try/catch で囲まれています。filenames は、読み込んでいるすべてのファイル名の配列で (このコードは for ループで複数回実行されます)、拡張子は".PNG". 画像は、EngineTextures という別のソース フォルダーにあります。

このプログラムを実行すると、Eclipse で問題なく動作します。すべてのテクスチャが読み込まれ、他のすべてのコードが実行されます! ただし、実行可能なjarとしてエクスポートし、コマンドプロンプトで実行してinput == null、それらすべてでエラーを受け取り、その中にある行を指しImageIO.read(Thread.currentThread()ます。

キッカーは、このすべてが以前に別のプロジェクトで機能していたことです。そのプロジェクトを再エクスポートしようとしても、まったく変更されていないコードで同じエラーが発生します。これにより、あいまいな Eclipse 設定が誤って変更されたと思われます。

jar を開くと、私の MANIFEST.MF のバージョン1.0とクラスパスは単純な.ものでしたが、これはこの種のことに対して正しいと思いましたか? Main-Class は適切な場所を指しており、すべての写真は META-INF フォルダーのすぐ隣にあります。

私が失敗した解決策:

getResourceAsStream は Eclipse で機能しますが、ブラウザーでアプレットとして実行すると機能しません

getResourceAsStream() が IDE では機能するのに JAR では機能しないのはなぜですか?

Java IDE - Eclipse、リソースのインポート

Eclipse IDE で作成した jar 内のオーディオ ファイル

getResourceAsStream() は jar で null を返しますが、Eclipse では問題ありません

さらに、ワークスペースを完全に削除し、写真とコードを同じ状態に再コピーしました。

事前に、すべての助けに感謝します。このようなことを繰り返すのは嫌ですが、これまでのところ解決策はありません。重要な情報を提供していない場合はお知らせください。

4

1 に答える 1

1

jar を開くと、私の MANIFEST.MF のバージョンは 1.0 で、クラスパスは単純な . ですが、これはこの種のことに対して正しいと思いましたか?

いいえ。JAR ファイルの Class-Path エントリは、この jar ファイルの場所を基準にして他の JAR ファイルに名前を付けます。ディレクトリに名前を付けません:

「この属性の値は、このアプリケーションまたは拡張機能が必要とする拡張機能またはライブラリの相対 URL を指定します。」

これは、ロードされるリソースがgetResourceAsStream()JAR ファイルにある必要があることを意味します。

于 2013-08-06T03:16:27.610 に答える