所以我导入一个图像用作背景,出于某种原因它给了我:
Uncaught error fetching image:
java.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection(Unknown Source)
at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
at sun.awt.image.ImageFetcher.run(Unknown Source)
有人可以帮助我吗?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class PixelLegendsMain extends JFrame implements ActionListener{
public void actionPerformed(ActionEvent e){
}
public static void main(String[ ] args)throws Exception{
PixelLegendsMain plMain = new PixelLegendsMain();
arenaBuild arena = new arenaBuild();
plMain.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
plMain.add(arena);
plMain.setSize(600,460);;
plMain.setVisible(true);
plMain.setResizable(false);
plMain.setLocation(200, 200);
}
}
这是主要类,并且:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Font;
import java.awt.Graphics;
import java.net.URL;
import java.io.*;
import javax.swing.Timer;
public class arenaBuild extends JPanel{
String picPath = "pictures/";
String[] fileName = {picPath+"stageBridge.png", picPath+"turret.png"};
ClassLoader cl = arenaBuild.class.getClassLoader();
URL imgURL[] = new URL[2];
Toolkit tk = Toolkit.getDefaultToolkit();
Image imgBG;
public arenaBuild()throws Exception{
for (int x=0;x<2;x++){
imgURL[x]= cl.getResource(picPath+fileName[x]);
}
imgBG = tk.createImage(imgURL[0]);
}
public void paintComponent(Graphics g){
g.drawImage(imgBG,0,0,600,460,0,0,600,460, this);
}
}
Thjis是我调用图片的地方。我是新手,所以如果有人能解释为什么会发生这种情况并帮助我解决它,我会很感激:D
答案 0 :(得分:1)
最可能的解释是,您的tk.createImage(imgURL[0])
来电正在传递null
网址。
怎么会发生这种情况?如果ClassLoader.getResource(String)
方法无法找到资源,那么null
方法就会specified返回"pictures/pictures/stageBridge.png"
...所以似乎问题是您使用了错误的路径资源。
您使用的路径如下:"pictures/pictures"
:
您似乎不太可能将图片放在名为ClassLoader
的目录中。
由于您在Class
对象(而不是{{1}}对象)上调用该方法,因此您使用的名义相对路径将被视为绝对路径;即你会得到“/ pictures / ...”而不是“/ PixelLegendsMain / pictures / ...”
答案 1 :(得分:1)
似乎我不幸地长时间不看我自己的代码,似乎我两次调用picPath而不是路径
"pictures/stageBridge.png"
是
"pictures/pictures/stageBridge.png"
抱歉浪费时间,谢谢大家回答
答案 2 :(得分:0)
尝试打印当前工作目录,以检查图像路径是否正确。
这是一种简单的方法:
System.out.println(new File(".").getAbsolutePath());
问题可能是图片pictures/tageBridge.png
和pictures/turret.png
不是文件的正确路径。
希望它有所帮助!