我有一個典型的NullPointerException異常:爲什麼這似乎並沒有被初始化
Exception in thread "Thread-0" java.lang.NullPointerException
at com.game.main.SpriteSheet.grabImage(SpriteSheet.java:17)
at com.game.main.Textures.getTextures(Textures.java:30)
at com.game.main.Textures.<init>(Textures.java:21)
at com.game.main.Game.init(Game.java:80)
at com.game.main.Game.run(Game.java:116)
at java.lang.Thread.run(Thread.java:745)
,我敢肯定,我知道空是的,我認爲這是這個方法(同樣,這是的getImage方法加載在任何一個網格,你要我創建了spritesheet.png圖像)
public BufferedImage grabImage(int column, int row, int width, int height){
System.out.println("img is " + image); //<<<< How I tested for null.. May not be the best way, but image said to be null
BufferedImage img = image.getSubimage((column * 32) - 32, (row * 32) - 32, width, height);
return img;
}
我看着周圍大約在這個課堂上的一切,這是類:SpiteSheet.class
package com.game.main;
import java.awt.image.BufferedImage;
public class SpriteSheet {
private BufferedImage image;
public SpriteSheet(BufferedImage image){
this.image = image;
System.out.println("img is " + this.image); // <<<<<<<<< THIS ONE SHOWS "img is nullException in thread "Thread-0" " in the console
}
public BufferedImage grabImage(int column, int row, int width, int height){
System.out.println("img is " + image); //<<<< How I tested for null.. May not be the best way, but image said to be null
BufferedImage img = image.getSubimage((column * 32) - 32, (row * 32) - 32, width, height);
return img;
}
}
我想知道如何才能啓動它?雖然我猜它已經是image.getSubimage(代碼),我測試了this.image,它說,這是NullPointerException ...但它應該已經啓動。
一些更多的類中可能涉及
Textures.class
package com.game.main; import java.awt.image.BufferedImage; public class Textures { public BufferedImage[] player = new BufferedImage[3]; public BufferedImage[] missile = new BufferedImage[3]; public BufferedImage[] enemy = new BufferedImage[3]; private SpriteSheet ss; private Game game; public Textures(Game game){ this.game = game; ss = new SpriteSheet(game.getSpriteSheet()); getTextures(); // This is line 21 } public void getTextures(){ player[0] = ss.grabImage(1, 1, 32, 32); //This is line 30 player[1] = ss.grabImage(1, 2, 32, 32); player[2] = ss.grabImage(1, 3, 32, 32); missile[0] = ss.grabImage(2, 1, 32, 32); missile[1] = ss.grabImage(2, 2, 32, 32); missile[2] = ss.grabImage(2, 3, 32, 32); enemy[0] = ss.grabImage(3, 1, 32, 32); enemy[1] = ss.grabImage(3, 2, 32, 32); enemy[2] = ss.grabImage(3, 3, 32, 32); }
}
的game.class是相當大的,所以我會給它所說的主要方法是涉及它(獲得它?init(),在其中......)
Game.class
public void init(){ requestFocus(); //Brings focus to the screen at the start BufferedImageLoader loader = new BufferedImageLoader(); try{ spriteSheet = loader.loadImage("/Sprite_Sheet.png"); background = loader.loadImage("/Background.png"); }catch(IOException e){ e.printStackTrace(); } addKeyListener(new KeyInput(this)); tex = new Textures(this); p = new Player(300,300, tex); c = new Controller(tex); ea = c.getEntityA(); eb = c.getEntityB(); c.createEnemy(enemyCount);
}
如果你需要我展示另一個類,我會很高興,因爲最大的和唯一的大這樣做( ish)一個是遊戲
**編輯:**這是getSpriteSheet方法
`public BufferedImage getSpriteSheet(){ return spriteSheet; }`
** EDIT1:**這是BufferedImageLoader類
package com.game.main;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class BufferedImageLoader {
private BufferedImage image;
public BufferedImage loadImage(String path) throws IOException{
image = ImageIO.read(getClass().getResource(path));
return image;
}
}
** EDIT2:**當我試圖從一開始的路徑,我只是得到這個錯誤,我不認爲我在處理它時犯了一個錯誤。所以生病保持它/Sprite_Sheet.png;
Exception in thread "Thread-0" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1388)
at com.game.main.BufferedImageLoader.loadImage(BufferedImageLoader.java:14)
at com.game.main.Game.init(Game.java:72)
at com.game.main.Game.run(Game.java:117)
at java.lang.Thread.run(Thread.java:745)
** EDIT3:**我檢查,如果它只是在一些空spriteSheet加載,它是,背景沒有給回空
**找到了答案:**我將其格式錯誤,雖然它是PNG,但它顯然不對,所以我用另一個圖像編輯器打開它並再次導出它。
你可以發佈getSpriteSheet方法嗎? – turingcomplete 2014-11-02 17:55:53
現在會做:) s – BiblyDoo 2014-11-02 17:58:48
@turingcomplete這是在遊戲類public BufferedImage getSpriteSheet(){ \t \t返回spriteSheet; \t} – BiblyDoo 2014-11-02 17:59:24