У меня есть следующая иерархия пакетов:
base--images--img.png
|
--code--Foo.java
|
--Base.java
То есть у меня есть пакет base
, который имеет 2 подпакета, base.images
и base.code
с соответствующими файлами в каждом. Base.java
просто вызывает метод в Foo
.
Все это входит в base.jar
при сборке.
Проблема: как Foo.java
загрузить img.png
независимо от того, где находится банка или откуда он бежит?
Некоторые вещи, которые я пробовал:
new File("../images/img.png")
Foo.class.getResource("../images/img.png")
Ни одна из этих операций не работает, потому что "../images/img.png"
добавляется к пути, из которого запускается JAR, а не к пути класса.
MWE:
In Foo.java:
package base.code;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
public class Foo {
public static void main(String[] args) {
URL url = Foo.class.getResource("/graphs/1.png");
try {
BufferedImage img = ImageIO.read(url);
} catch (IOException e) {
System.err.println("Image not found!");
}
}
}
В Base.java:
package base;
public class Base {
public static void main(String[] args)
Foo.main(args);
}
}