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文件夹的位置。我面临的问题是,我正在学习的那本书没有解释我的类的根文件夹的确切含义。多亏了你的例子,我现在可以继续了。:)很高兴听到,但从下一次-详细的错误跟踪。因此,您可以更快地解决问题。