1

所以我导入了一张图片作为背景,出于某种原因它给了我:

 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

4

3 回答 3

1

最可能的解释是您的tk.createImage(imgURL[0])调用传递了一个nullURL。

这怎么可能发生?好吧,如果找不到资源,该ClassLoader.getResource(String)方法被指定为返回......所以问题似乎是您为第一个资源使用了错误的路径。null

您使用的路径似乎是这样的"pictures/pictures/stageBridge.png"::

  • 您似乎不太可能将图像真正放在名为"pictures/pictures".

  • ClassLoader由于您是在对象(而不是对象)上调用该方法Class,因此您使用的名义上的相对路径将被视为绝对路径;即你会得到“/pictures/...”而不是“/PixelLegendsMain/pictures/...”

于 2012-12-09T00:05:54.510 回答
1

似乎我不幸地没有看我自己的代码足够长的时间,似乎我调用了两次 picPath 所以而不是路径

 "pictures/stageBridge.png"

它是

 "pictures/pictures/stageBridge.png"

很抱歉浪费时间,谢谢大家的回答

于 2012-12-09T02:11:01.710 回答
0

尝试打印当前工作目录,以检查您的图像路径是否正确。

这是一种简单的方法:

System.out.println(new File(".").getAbsolutePath());

也许问题在于图像不是文件的正确路径pictures/tageBridge.pngpictures/turret.png

希望能帮助到你!

于 2012-12-08T22:17:14.607 回答