罐嵌入资源的NullPointerException [关闭](Jar Embedded Resou

2019-07-04 20:46发布

我最初开始与Chillax,遭遇这么多问题后如此接近最后期限,我又回到了IDE我比较熟悉,NetBeans和我改变了我的方式,以更基本的“小行星”型游戏:

  • NB的zip文件: http://ge.tt/4T5tBFT/v/0?c
  • 文本:混帐混帐克隆://gist.github.com/4248746.git
  • 嵌入?:

在NetBeans中,我得到:

Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at gayme.Craft.<init>(Craft.java:27)
at gayme.Board.<init>(Board.java:54)
at gayme.Gayme.<init>(Gayme.java:9)
at gayme.Gayme.main(Gayme.java:19)
Java Result: 1

来源:(工艺26 - 34)

    public Craft() {
    ImageIcon ii = new ImageIcon(this.getClass().getResource("craft.png"));
    image = ii.getImage();
    width = image.getWidth(null);
    height = image.getHeight(null);
    missiles = new ArrayList();
    visible = true;
    x = 40;
    y = 60;}

(板54)

    craft = new Craft();

(Gayme 9)

    add(new Board());

(Gayme 19)

   new Gayme();

我有我真的需要解决,我的睡眠被剥夺的大脑想出每一个丢失的问题。 随意助阵的为准游戏,你宁愿。 非常感谢你们!

Answer 1:

有3种方法:

  • 类#的getResourceAsStream(字符串名称)
  • 类的getResource#(字符串名称)
  • 工具包#的createImage(网址URL)

有几件事情要记住与位于内JAR文件和资源:

  • JVM是区分大小写因此文件和包名称是区分大小写。 即主类是位于mypackage的范围内,我们现在不能与像路径提取它:mypackage的

  • 任何时期“” 位于封装内的名称应改为“/”

  • 如果名称以“/”(“\ u002f”)开始,然后是资源的绝对名称是继“/”的名称的一部分。 执行的类时,资源名称以/和资源在不同的包。

让我们把该使用我的首选方法测试getResource(..)将返回我们的资源的URL:

我创建了一个项目,2包:org.testmy.resources:

正如你可以看到我的形象是my.resources同时持有主类main(..)org.test。

Main.java:

import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class Main {

    public static final String RES_PATH = "/my/resources";//as you can see we add / to the begining of the name and replace all periods with /
    public static final String FILENAME = "Test.jpg";//the case sensitive file name

    /*
     * This is our method which will use getResource to extarct a BufferedImage
     */
    public BufferedImage extractImageWithResource(String name) throws Exception {

        BufferedImage img = ImageIO.read(this.getClass().getResource(name));

        if (img == null) {
            throw new Exception("Input==null");
        } else {
            return img;
        }
    }

    public static void main(String[] args) {
        try {
            BufferedImage img = new Main().extractImageWithResource(RES_PATH + "/" + FILENAME);
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }
}

如果你用的名字玩耍RES_PATHFILENAME ,而无需对实际文件适当的修改,你会得到一个异常(只是表明你要跟我们多么小心必须与路径)

更新:

为了您的具体问题,您有:

ImageIcon ii = new ImageIcon(this.getClass().getResource("craft.png"));

它应该是:

ImageIcon ii = new ImageIcon(this.getClass().getResource("/resources/craft.png"));

Alien和其他类也需要改变。



文章来源: Jar Embedded Resources NullPointerException [closed]