不确定为什么没有显示图像

时间:2012-12-08 22:06:49

标签: java image import

所以我导入一个图像用作背景,出于某种原因它给了我:

 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

3 个答案:

答案 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.pngpictures/turret.png不是文件的正确路径。

希望它有所帮助!