Java: NullpointerException 来自
Java: NullpointerException by
我得到 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);
}
}
PaintableImage.java:
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));
}
}
我的 MyImage.class 和我的 PaintableImage.class 位于一个文件夹中,在此文件夹中有一个 img 文件夹,我的 Flower.jpg 就在其中。
有什么建议么?
您遇到的空指针错误应该在这一行
img = Toolkit.getDefaultToolkit()
.createImage(getClass()
.getClassLoader()
.getResource(name));
这是因为找不到文件Flower.jpg。
当您提供 getClassLoader().getResource(name) 时,它会在 class 个文件所在的根目录中查找 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
}
}
从这里得到例子 -
Java - getClassLoader().getResource() driving me bonkers
希望对您有所帮助。
将您的图像文件夹移动到 class 文件所在的根目录,找到那个 - 你能像上面那样打印吗?
示例 - 如果它是一个基于 Web 的项目,classes 将位于 web-inf/classes 下,因此您应该将 img 文件夹放在 classes 文件夹中。
我得到 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);
}
}
PaintableImage.java:
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));
}
}
我的 MyImage.class 和我的 PaintableImage.class 位于一个文件夹中,在此文件夹中有一个 img 文件夹,我的 Flower.jpg 就在其中。 有什么建议么?
您遇到的空指针错误应该在这一行
img = Toolkit.getDefaultToolkit()
.createImage(getClass()
.getClassLoader()
.getResource(name));
这是因为找不到文件Flower.jpg。 当您提供 getClassLoader().getResource(name) 时,它会在 class 个文件所在的根目录中查找 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
}
}
从这里得到例子 - Java - getClassLoader().getResource() driving me bonkers
希望对您有所帮助。
将您的图像文件夹移动到 class 文件所在的根目录,找到那个 - 你能像上面那样打印吗?
示例 - 如果它是一个基于 Web 的项目,classes 将位于 web-inf/classes 下,因此您应该将 img 文件夹放在 classes 文件夹中。