[英]ImageIO.read(fileinputstream/imageinputstream/bufferedinputstream) causing entire class to show null pointer error (java)
所以我試圖將一些圖像上傳到 class 中的緩沖圖像數組,但是當我運行代碼時,我有代碼的 class 返回一個 npe。 該圖像是一個 png 文件。 這是代碼:
...
private BufferedImage[] img = new BufferedImage[2];
public Backdrop(String args[]) {
for (int i = 1; i <= 2; i++) {
String path = "resources/Map1"+i+".png";
File file = new File(path);
if (file.length() <= 0 || !file.isFile() || !file.exists()) {
System.out.println("Image " + i + " failed first test");
}
try {
FileInputStream fis = new FileInputStream(file);
img[i-1] = ImageIO.read(fis);
} catch (IOException e) {
e.printStackTrace();
}
if (img[i-1] == null) {
System.out.println("Failed to upload Map1" + i + ".png to array");
}
}
}
public void render(Graphics g){
switch(currentBackdrop) {
case Map11:
/*//upload map image
g.drawImage(img, 0, 0, null);*/
break;
case Menu:
g.setColor(Color.black);
g.fillRect(0, 0, WIDTH, HEIGHT);
break;
default:
break;
}
}
正如標題所說,我已經嘗試過使用文件輸入流、圖像輸入流、緩沖輸入流。 我也嘗試過使用新文件(...)。 同樣的事情也會發生。 我認為這是 img[i-1] = ImageIO.read(fis); 因為當我將其注釋掉時,一切正常(顯然圖像不顯示,因為我已將 g.drawImage 代碼注釋掉並且數組為空)。 在談論 for 循環中只有一小部分的事實之前,我稍后會增加它,我只是想讓它首先工作。 我很確定路徑位於正確的位置,因為如果我將路徑更改為 fdilsjah.png 之類的路徑,錯誤將是 filenotfoundexception。 此外,第一個 println 代碼沒有運行,所以我認為這也表明文件存在。
這是錯誤消息:
Exception in thread "Thread-0" java.lang.NullPointerException
at com.CASGame.InsomniacCheese.Game.render(Game.java:137)
at com.CASGame.InsomniacCheese.Game.run(Game.java:85)
所以 Game.java:137 只是 background.render(g) (這只是 Backdrop 類的私有實例)
如果您在 Game.java:137 有 background.render backdrop.render(g)
,則上述堆棧跟蹤表明backdrop
是null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.