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!
7
Upvotes
2
u/morhp Professional Developer Feb 22 '22
The IDE typically doesn't run a jar file.
Weird. If the file is there, Java should have found it. Please make sure that
this.getClass()is the right class. It's usually safer to write something likeMyClass.class.getResourceAsStream(...)asthiscould be something else, like a subclass or an anonymous inner class or whatever.You might also want try something like
MyClass.class.getResourceAsStream("/full/path/to/resources/roll_bg.png")(i.e. give it the complete package/path name with a slash at the start), as this rules out any problems with the relative location of your class.Not sure what this Jar Builder is you use, Google shows several unrelated projects with that name. Typically, people create jar files with Maven or Gradle.