次のフォルダ構造を想像してください
- フォルダ
- App.jar
- img(実は存在すら知らなかった)
App.jar 内にはimgフォルダーもあります。
したがって、次のコードを使用して画像 img を読み取りました
InputStream is = IconManager.class.getClassLoader().getResourceAsStream("img/1.png");
BufferedImage bimage = ImageIO.read(is);
is.close();
このスニペットがjar自体からファイルを読み取るのに完全に機能することは以前から知っていました。しかし、偶然にも古いバージョンの img が内部にあったため、jar 自体ではなく、外部のフォルダー/imgfolderから画像ファイルを読み取り始めました。imgそして、私はそれを理解するために多くの時間を費やしました。
私の質問は、デフォルトでスニペットが App.jar ではなく folder/img から読み取ろうとするのはなぜですか?
UPD: java -jar App.jarfromを使用して実行しますfolder
私はWindows 7を使用classpathしており、jarを構築する前にEclipseで指定したことはありません