我试图通过paint方法将背景绘制到窗口,它似乎我已成功。但我在控制台上发现了问题。这是“NullPointerException”。线程“AWT-EventQueue-0”中的异常错误
的GameWindow代码:
package com.vboar.game;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
public class GameWindow extends JFrame {
private List<BackGround> allBg = new ArrayList<BackGround>();
private BackGround nowBg = null;
public GameWindow() {
this.setTitle("IGame Beta v1.0");
this.setSize(1000, 600);
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
this.setLocation((width - 1000)/2, (height - 600)/2);
this.setVisible(true);
StaticValue.init();
for (int i = 1; i <= 10; i++) {
this.allBg.add(new BackGround(i));
}
this.nowBg = this.allBg.get(0);
this.repaint();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
}
public static void main(String[] args) {
new GameWindow();
}
@Override
public void paint(Graphics g) {
BufferedImage image = new BufferedImage(1000,600,BufferedImage.TYPE_3BYTE_BGR);
Graphics g2 = image.getGraphics();
g2.drawImage(this.nowBg.getBgImage(), 0, 0, this);
g.drawImage(image, 0, 0, this);
}
}
,后台代码:
package com.vboar.game;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
public class BackGround {
private BufferedImage bgImage = null;
private int sort;
public BufferedImage getBgImage() {
return bgImage;
}
public BackGround(int sort) {
this.sort = sort;
bgImage = StaticValue.allbgImage.get(0);
}
}
的StaticValue代码:
package com.vboar.game;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
public class StaticValue {
public static BufferedImage blockImage = null;
public static BufferedImage treeImage = null;
public static BufferedImage startImage = null;
public static BufferedImage deadImage = null;
public static List<BufferedImage> allbgImage = new ArrayList<BufferedImage>();
public static List<BufferedImage> alliImage = new ArrayList<BufferedImage>();
public static String imagePath = System.getProperty("user.dir") + "/bin/";
public static void init() {
try {
blockImage = ImageIO.read(new File(imagePath + "block.png"));
treeImage = ImageIO.read(new File(imagePath + "greentree.png"));
startImage = ImageIO.read(new File(imagePath + "startbg.png"));
deadImage = ImageIO.read(new File(imagePath + "9.png"));
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 1; i <= 8; i++) {
try {
alliImage.add(ImageIO.read(new File(imagePath + i + ".png")));
} catch (IOException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 10; i++) {
try {
allbgImage.add(ImageIO.read(new File(imagePath + "background" + i + ".png")));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
完整的异常堆栈跟踪:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException {
at com.vboar.game.GameWindow.paint(GameWindow.java:41)
at javax.swing.RepaintManager$3.run(Unknown Source)
at javax.swing.RepaintManager$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$1000(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
}
这是我第一次问的stackoverflow.com使代码可能会非常难看。另外,我不是说英语的人,而且写作很糟糕。你能帮我一个Java学习者来解决这个问题吗?
预先感谢您。
Vboar
非常感谢你~~~ _ – Vboar