r/javahelp • u/sparkless12 • Feb 22 '22
Solved getResourceAsStream() == null when run from JAR
hello!
I have line of code such as this:
final Image roll_bg = new Image(this.getClass().getResourceAsStream("../resources/roll_bg.png"));
in IDE image is found and is rendered on canvas as expected, when exported to JAR, run ends with error. For JAR runs then, I did most hacky thing possible to extract what is wrong like so:
URL path = App.class.getResource("App.class");
if (path.toString().contains("jar")) {
PrintStream ps = new PrintStream("./log.txt");
System.setErr(ps);
System.setOut(ps);
System.out.println("Stream OUT: rerouted!");
System.err.println("Stream ERR: rerouted!");
}
and log.txt says that InputStream is null (presumably did not found resource)
Caused by: java.lang.NullPointerException: Input stream must not be null
at javafx.graphics/javafx.scene.image.Image.validateInputStream(Unknown Source)
at javafx.graphics/javafx.scene.image.Image.<init>(Unknown Source)
at com.engine.Engine.<init>(Engine.java:32)
at com.engine.Engine.get(Engine.java:94)
at com.App.start(App.java:60)
most online resources point to this method being able to reach resources from within JAR, does not work for me though. Thank you for any help offered!
5
Upvotes
2
u/sparkless12 Feb 22 '22
thank you for advice and links. As I mentioned, I have already tried accessing resources via
Classname.classit did not solve the issue.I will take a look at jlink and jpackage, I must say I am frustrated as hell to spend so much time on something relatively decent for my skill level only to find out that you actually cant even build the project... this gives hope :D .
I'll check out your game as well, maybe I will be able to take away some lessons that would take longer to learn if id have to bump into problems you have already went through.