1

ImageIO がいくつかの .png から BufferedImage を読み取るためのリソースへのパスを取得したいと考えています。プロジェクトの開発中、「/bin/stuff/icons/image.png」への相対パスを使用しますが、すべてを .jar ファイルにまとめると、これは明らかに機能しません。そのため、へのパスを取得する方法が必要です。これらのリソースは、Eclipse でのテスト中と、後で .jar 内で実行するときの両方で使用できます。

4

2 に答える 2

1

ファイルの検索とファイルへの入力ストリームの取得の両方を何度も試した後、このアプローチは毎回機能するという結論に達しました。

InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream(path)
BufferedImage image = ImageIO.read(in)

パスはどこにありますか

"projectName/resourceFolder/" + nameOfResource.stuff

eclipseプロジェクトのsrcディレクトリにあります。

例えば

"myProject/images/icon.png"

リソースのみを取得してからファイルにリンクするリソースのパスを取得する場合、.jarを使用するとFileNotFoundExceptionsが発生します(ただし、Eclipseでのテスト中は発生しないため、彼のコードが機能すると考えるように警告する必要があります)。

そして-いいえ-私はbinに画像を保存しません/-しかし、それらはこのディレクトリにコピーされているので、テスト中にそこで見つけます。今、すべてが機能しているようです。

于 2012-11-19T13:54:46.357 に答える
0

Eclipseのディレクトリの下には何も置かないでくださいbin。プロジェクトでクリーンを実行すると、プロジェクトは消去されます。

できることは、のような新しいソースフォルダを定義し、resourcesそこに画像を配置することです。このようにして、フォルダに自動的にコピーされbinます。

resourcesフォルダをJarに含めると、次のようなものを使用して両方の環境で使用できるようになります。

ImageIO.read( getClass().getResource("/image.png") )

PS:別のリソースフォルダを使用して回避することはできますが、ソースと画像を混在させると、ソースフォルダがすぐに汚染されます。

于 2012-11-16T14:49:24.140 に答える