问题
This is a question that has been asked like 100 times on this site, but I have looked at all of them and even though they all were solved, none of the solutions worked for me.
Here\'s what my code looks like:
public Button1(Client client, String imgName) {
this.client = client;
try {
this.icon = ImageIO.read(this.getClass().getResourceAsStream(\"/resources/\" + imgName));
} catch (IOException e) {
e.printStackTrace();
}
When the code runs it results in the following error:
Exception in thread \"main\" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
The string imgName is passed to the constructor from a child class and is the name of an image (e.g. image.png). I also have made sure that my resources folder is in the root of the project folder, and is included as a source folder in the eclipse project. I\'ve also made sure that System.getProperty(\"user.dir\") points to the correct location. I have also tried using getResource() instead of getResourceAsStream(), but it still does not work.
回答1:
Try using this:-
this.icon = ImageIO.read(new FileInputStream("res/test.txt"));
where res folder is present at the same level as your src folder. Also, if you notice, the slash / before the res folder name was removed.
回答2:
The path passed as the argument to getResourceAsStream() should be relative to the classpath set. So try changing this
this.icon = ImageIO.read(this.getClass().getResourceAsStream("/resources/" + imgName));
to
this.icon = ImageIO.read(this.getClass().getResourceAsStream("resources/" + imgName));
回答3:
I had the exact same problem. I used the path "my_image.png" at first but it did not work, so I searched everywhere and tried the other solutions posted on this site but none of them worked. I solved mine by changing my code from this
image = ImageIO.read(SpriteSheet.class.getResourceAsStream("res/image.png"));
to this
image = ImageIO.read(SpriteSheet.class.getResourceAsStream("/image.png"));
I hope this helps, even though this question was posted 5 years ago.
回答4:
This may come as a "No, Duh!" to many on this site, but it is always important to point out how literal Java is. Case sensitivity is key, especially if you .jar a file.
If your program works fine with compiling and then running but suddenly is getting this issue when you .jar your files. Make sure to check you Case on your folders / files and your references in your code. (As well as make sure they are in your .jar)
Hope this helps anyone that ends up here looking at the same issue.
回答5:
Try this:
this.icon = ImageIO.read(this.getClass().getResource("/resources/" + imgName));
回答6:
You can try this:
image = ImageIO.read(getClass().getResource("/resources/" + imgName));
回答7:
Try using the following
this.icon = ImageIO.read(this.getClass().getResourceAsStream("../resources/" + imgName));
回答8:
Is the resource folder a class folder in eclipse? Right click on the project -> Properties -> Java Build Path -> Libraries -> Add Class Folder... -> (select the res folder) and add it as a class folder.
回答9:
Try This
private BufferedImage get(String path) throws IOException{
URL url = this.getClass().getClassLoader().getResource(path);
String thing = url.getFile();
return ImageIO.read(new File(thing));
}
来源:https://stackoverflow.com/questions/15424834/java-lang-illegalargumentexception-input-null-when-using-imageio-read-to-lo