【问题标题】:Not sure why image is no being displayed不知道为什么没有显示图像
【发布时间】:2012-11-26 18:32:55
【问题描述】:

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

 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

【问题讨论】:

  • 尝试使用“/pictures/”而不是“pictures/”。并调用 super.paintComponent(g) - 它不会解决您当前的问题,但会解决您在没有它的情况下必然会遇到的其他问题
  • 看看这个例子。 ideone.com/DpZz12

标签: java image import


【解决方案1】:

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

 "pictures/stageBridge.png"

原来是

 "pictures/pictures/stageBridge.png"

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

【讨论】:

  • @caccho,我会的,但我要等 2 天,谢谢你的信息
【解决方案2】:

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

怎么会这样?好吧,ClassLoader.getResource(String) 方法是 specified,如果它找不到资源则返回 null ......所以问题似乎是你为第一个资源使用了错误的路径。

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

  • 您似乎不太可能将图像真正放在名为 "pictures/pictures" 的目录中。

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

【讨论】:

    【解决方案3】:

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

    这是一个简单的方法:

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

    问题可能是图像pictures/tageBridge.pngpictures/turret.png 不是文件的正确路径。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2020-03-08
      • 2013-02-17
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多