Java:NullpointerException by

Java:NullpointerException by,java,image,classloader,getresource,Java,Image,Classloader,Getresource,运行下面的代码时,我得到一个NullPointerException。我不知道为什么我会得到它,它阻止了我进一步的发展 MyImage.java: import java.awt.Image; import java.awt.Toolkit; public class MyImage { private String name; private Image img = null; public MyImage(String n) { this.nam

运行下面的代码时,我得到一个
NullPointerException
。我不知道为什么我会得到它,它阻止了我进一步的发展

MyImage.java:

import java.awt.Image;
import java.awt.Toolkit;

public class MyImage {

    private String name;
    private Image img = null;

    public MyImage(String n) {
        this.name=n;
    }

    public Image get() {
        if (img == null) {
            img = Toolkit.getDefaultToolkit()
                         .createImage(getClass()
                         .getClassLoader()
                         .getResource(name));
        }
        return (img);
    }
}
package name.burre.jan.animationGame;

import java.awt.Graphics;
import javax.swing.JPanel;

public class PaintableImage extends JPanel implements Paintable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    MyImage mi;

    public PaintableImage (MyImage m) {
        this.mi = m;
    }

    public PaintableImage(String name) {
        this.mi = new MyImage(name);
    }

    @Override
    public void paintTo(Graphics g) {
        g.drawImage(mi.get(),0,0,this);
    }

    public static void main (String[] args) {
        PaintableImage pi = new PaintableImage("img/Flower.jpg");
        System.out.println(pi.mi.get().getHeight(pi));
    }
}
PaintableImage.java:

import java.awt.Image;
import java.awt.Toolkit;

public class MyImage {

    private String name;
    private Image img = null;

    public MyImage(String n) {
        this.name=n;
    }

    public Image get() {
        if (img == null) {
            img = Toolkit.getDefaultToolkit()
                         .createImage(getClass()
                         .getClassLoader()
                         .getResource(name));
        }
        return (img);
    }
}
package name.burre.jan.animationGame;

import java.awt.Graphics;
import javax.swing.JPanel;

public class PaintableImage extends JPanel implements Paintable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    MyImage mi;

    public PaintableImage (MyImage m) {
        this.mi = m;
    }

    public PaintableImage(String name) {
        this.mi = new MyImage(name);
    }

    @Override
    public void paintTo(Graphics g) {
        g.drawImage(mi.get(),0,0,this);
    }

    public static void main (String[] args) {
        PaintableImage pi = new PaintableImage("img/Flower.jpg");
        System.out.println(pi.mi.get().getHeight(pi));
    }
}
My MyImage.class和My PaintableImage.class位于一个文件夹中,在这个文件夹中有一个img文件夹,My Flower.jpg位于该文件夹中。
有什么建议吗

您面临的空指针错误应位于此行

img = Toolkit.getDefaultToolkit()
                         .createImage(getClass()
                         .getClassLoader()
                         .getResource(name));
这是因为它找不到Flower.jpg文件。 当您给出getClassLoader().getResource(名称)时,它会在类文件所在的根目录中查找img文件夹

您可以查看下面的示例以更好地理解

来源

package Sound;
public class ResourceTest {
    public static void main(String[] args) {
        String fileName = "Kalimba.mp3";
        System.out.println(fileName);
        System.out.println(new ResourceTest().getClass().getResource(fileName));
        System.out.println(new ResourceTest().getClass().getClassLoader().getResource(fileName));
输出

Kalimba.mp3
file:/C:/Users/User/Workspaces/MyEclipse%208.5/JMplayer/bin/Sound/Kalimba.mp3
file:/C:/Users/User/Workspaces/MyEclipse%208.5/JMplayer/bin/Kalimba.mp3
    }
}
这里有个例子-

希望能有帮助

将您的图像文件夹移动到类文件所在的根目录,以找到该文件夹-您可以像上面那样进行打印


示例-如果是基于web的项目,则类将位于web inf/classes下,因此您应该将img文件夹放在classes文件夹中。

请提供整个异常消息。堆栈跟踪将非常有用。我猜如果没有堆栈跟踪,它将无法在
img/Flower.jpg
中找到图像。这会导致
get()
返回null(或者可能抛出NPE本身),然后导致
g.drawImage()
抛出NPE。但是stacktrace真的很有用。如果用上面的输入解决了问题,请标记为已回答(勾选)。谢谢。我的问题实际上是我的img文件夹的位置。我面临的问题是,我正在学习的那本书没有解释我的类的根文件夹的确切含义。多亏了你的例子,我现在可以继续了。:)很高兴听到,但从下一次-详细的错误跟踪。因此,您可以更快地解决问题。