我正在尝试为此游戏加载背景图片,该文件与类文件位于同一文件夹中,并且只有一个文件夹。我已经搜索了不同的方法来引用该文件,但都失败了。这是抛出的错误:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at ThrustR.<init>(ThrustR.java:28)
at ThrustR.main(ThrustR.java:35)
以下是代码:
public class ThrustR extends JFrame
{
public String path;
public File file;
public BufferedImage image;
public void setValues() throws IOException
{
path = "CityRed.jpg";
file = new File(path);
image = ImageIO.read(file);
}
public ThrustR(String title)
{
super(title);
JLabel back = new JLabel(new ImageIcon(image));
}
public static void main(String[] args)
{
// Main Window
ThrustR frame = new ThrustR("ThrustR");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(720,480);
frame.setVisible(true);
}
}
答案 0 :(得分:0)
尝试:
getClass().getResource("/CityRed.jpg")
答案 1 :(得分:0)
您没有从任何地方调用setValues()
方法。
我能弄清楚的是,当程序的执行开始时,它转到main()
方法,你正在创建类ThrustR frame = new ThrustR("ThrustR");
的对象,它将调用它的构造函数,这是
public ThrustR(String title){
super(title);
JLabel back = new JLabel(new ImageIcon(image));
}
在此,您正在创建ImageIcon的另一个对象,即new ImageIcon(image)
,此时image
将为空。到目前为止,setValues()
尚未调用,默认情况下public BufferedImage image;
将为空。
答案 2 :(得分:0)
您尚未调用setvalues()方法。我已经对您的代码进行了一些更改,并且可以尝试为我工作。
public class ThrustR extends JFrame {
// public String path;
// public File file;
// public BufferedImage image;
// public void setValues()
// {
// path = "/CityRed.jpg";
// file = new File(path);
//image = ImageIO.read(file);
// }
public ThrustR(String title) throws IOException {
super(title);
String path = "CityRed.jpg";
File file = new File(path);
BufferedImage image = ImageIO.read(file);
JLabel back = new JLabel(new ImageIcon(image));
this.add(back);
}
public static void main(String[] args) throws IOException {
// Main Window
ThrustR frame = new ThrustR("ThrustR");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(720, 480);
frame.setVisible(true);
}
}