I have a small GUI that include some JSliders and what have you. I could export it as a .jar and it would run without any problems. I then decided to add some images and I put them in a subfolder within my package in eclipse. Now when I export the file and try and run it I get the following errors (when run in terminal)
Henry-MAC:desktop 2010imac01$ java -jar trust.jar
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1362)
at trust.GUI.<init>(GUI.java:75)
at trust.main.main(main.java:11)
After a lot of googling I think it is something to do with a .jar not being included in my manifest (that eclipse generates). How do I see/add the necessary class-paths in the manifest.
This is the part where I open images (what I think is the error)
try {
n = ImageIO.read((this.getClass().getResource("smiles/n.png")));
s5 = ImageIO.read((this.getClass().getResource("smiles/5.png")));
s4 = ImageIO.read((this.getClass().getResource("smiles/4.png")));
s3 = ImageIO.read((this.getClass().getResource("smiles/3.png")));
s2 = ImageIO.read((this.getClass().getResource("smiles/2.png")));
f5 = ImageIO.read((this.getClass().getResource("smiles/-5.png")));
f4 = ImageIO.read((this.getClass().getResource("smiles/-4.png")));
f3 = ImageIO.read((this.getClass().getResource("smiles/-3.png")));
f2 = ImageIO.read((this.getClass().getResource("smiles/-2.png")));
smile = new Easel(n);
} catch (IOException e) {
System.out.println("error");
}
When the images are packaged in a JAR, the classloader can find your image if you are using something like this:
this.getClass().getResource("/resources/icon.png")
OR
this.getClass().getResourceAsStream("/resources/icon.png")
That is in your case, the code should be as shown below:
try {
n = ImageIO.read((this.getClass().getResource("/smiles/n.png")));
s5 = ImageIO.read((this.getClass().getResource("/smiles/5.png")));
s4 = ImageIO.read((this.getClass().getResource("/smiles/4.png")));
s3 = ImageIO.read((this.getClass().getResource("/smiles/3.png")));
s2 = ImageIO.read((this.getClass().getResource("/smiles/2.png")));
f5 = ImageIO.read((this.getClass().getResource("/smiles/-5.png")));
f4 = ImageIO.read((this.getClass().getResource("/smiles/-4.png")));
f3 = ImageIO.read((this.getClass().getResource("/smiles/-3.png")));
f2 = ImageIO.read((this.getClass().getResource("/smiles/-2.png")));
smile = new Easel(n);
} catch (IOException e) {
System.out.println("error");
}
OR
try {
n = ImageIO.read((this.getClass().getResourceAsStream("/smiles/n.png")));
s5 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/5.png")));
s4 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/4.png")));
s3 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/3.png")));
s2 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/2.png")));
f5 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/-5.png")));
f4 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/-4.png")));
f3 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/-3.png")));
f2 = ImageIO.read((this.getClass().getResourceAsStream("/smiles/-2.png")));
smile = new Easel(n);
} catch (IOException e) {
System.out.println("error");
}
Hope this serves your purpose...
Thank you!
Try this:
BufferedImage n = ImageIO.read(new File("./smiles/n.png"));
I assume that the image n.png is inside the smiles folder under your project folder.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.