【问题标题】:nullpointerexception when declaring new ImageIcon声明新 ImageIcon 时出现 nullpointerexception
【发布时间】:2014-01-02 16:43:06
【问题描述】:

我试图在同一个窗口中加载多个图像,所以为了防止大量复制和粘贴,我制作了一个名为 badgeIMG 的图像类,如下所示:

    package BattleSim;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class badgeIMG extends JPanel{

    Image badgeIcon;
    String badgePath;
    int x = 0;
    int y = 0;

    public badgeIMG() {
        ImageIcon ii = new ImageIcon(this.getClass().getClassLoader().getResource(badgePath));
        badgeIcon = ii.getImage();
    }

    public void paint(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(badgeIcon, x, y, null);
    }
}

然后在另一个名为badgeSelectionWindow的类中,我有这段代码:

        badgeIMG allOrNothingBadge = new badgeIMG();
    badgeIMG closeCall = new badgeIMG();

    allOrNothingBadge.badgePath = "/Badges/allornothing.gif";
    allOrNothingBadge.x = 128;
    allOrNothingBadge.y = 144;

    closeCall.badgePath = "/Badges/closecall.gif";
    closeCall.x = 256;
    closeCall.y = 144;

    add(allOrNothingBadge);
    add(closeCall);

问题是,当我从上面的代码中声明一个badgePath时,我得到了一个N​​ullPointerException,但是当我用一个真实的文件路径替换badgePath时,它不会给我错误,但我希望能够插入带有文件路径的字符串,并让它显示多个图像。有什么想法吗?

这是错误:

Exception in thread "main" java.lang.NullPointerException
at sun.misc.MetaIndex.mayContain(Unknown Source)
at sun.misc.URLClassPath$JarLoader.getResource(Unknown Source)
at sun.misc.URLClassPath.getResource(Unknown Source)
at sun.misc.URLClassPath.getResource(Unknown Source)
at java.lang.ClassLoader.getBootstrapResource(Unknown Source)
at java.lang.ClassLoader.getResource(Unknown Source)
at java.lang.ClassLoader.getResource(Unknown Source)
at BattleSim.badgeIMG.<init>(badgeIMG.java:17)
at BattleSim.badgeSelectionWindow.<init>(badgeSelectionWindow.java:11)
at BattleSim.badgeSelectionWindow.main(badgeSelectionWindow.java:36)

【问题讨论】:

  • 仅供参考,这是JDK-8136831,已在 JDK-9 中修复。

标签: java nullpointerexception imageicon


【解决方案1】:

您的badgePathnull

构造函数使用badgePath 作为ImageIcon 构造函数的参数,但它没有先初始化它。使用这样的构造函数:

public badgeIMG(String path)
{
    ImageIcon ii = new ImageIcon(this.getClass().getClassLoader().getResource(path));
    badgeIcon = ii.getImage();
    badgePath = path;
}

注意:非常重要:Java 命名约定是类以大写字符开头。所以把类名和文件名改成:BadgeImg或者BadgeIMG

【讨论】:

  • 好的,这是否意味着我应该摆脱 badadPath 因为 badgeIMG 上的(字符串路径),并尝试通过 badgeIMG allOrNothingBadge = new badgeIMG(); 声明文件路径?
  • 你应该使用:BadgeIMG allOrNothingBadge = new BadgeIMG("path/to/your/image/here.png");
【解决方案2】:
this.getClass().getClassLoader().getResource(badgePath))

你的badgePath是null.请用图片路径初始化。

当你试图拥有一个图像时,你应该给出一个路径。现在是null。在使用它之前给出一个减速路径或为其分配一个值可以解决您的问题。

  String badgePath="some/valid/path";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多