Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 声明新图像图标时出现nullpointerexception_Java_Nullpointerexception_Imageicon - Fatal编程技术网

Java 声明新图像图标时出现nullpointerexception

Java 声明新图像图标时出现nullpointerexception,java,nullpointerexception,imageicon,Java,Nullpointerexception,Imageicon,我试图在同一个窗口上加载多个图像,因此为了防止大量复制和粘贴,我创建了一个名为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 JPa

我试图在同一个窗口上加载多个图像,因此为了防止大量复制和粘贴,我创建了一个名为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);
    }
}
public badgeIMG(String path)
{
    ImageIcon ii = new ImageIcon(this.getClass().getClassLoader().getResource(path));
    badgeIcon = ii.getImage();
    badgePath = path;
}
然后在另一个名为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时,我得到了一个NullPointerException,但是当我用一个真实的文件路径替换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)
线程“main”java.lang.NullPointerException中的异常 位于sun.misc.MetaIndex.mayContain(未知源) 位于sun.misc.URLClassPath$JarLoader.getResource(未知源) 位于sun.misc.URLClassPath.getResource(未知源) 位于sun.misc.URLClassPath.getResource(未知源) 位于java.lang.ClassLoader.GetBootstrapSource(未知源) 位于java.lang.ClassLoader.getResource(未知源) 位于java.lang.ClassLoader.getResource(未知源) BattleSim.badgeIMG.(badgeIMG.java:17) 在BattleSim.badgeSelectionWindow。(badgeSelectionWindow.java:11) 在BattleSim.badgeSelectionWindow.main(badgeSelectionWindow.java:36)
您的
badgePath
null

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

    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);
    }
}
public badgeIMG(String path)
{
    ImageIcon ii = new ImageIcon(this.getClass().getClassLoader().getResource(path));
    badgeIcon = ii.getImage();
    badgePath = path;
}
注意:非常重要:Java命名约定是类以大写字符开头。因此,将类名和文件名更改为:
BadgeImg
BadgeImg

this.getClass().getClassLoader().getResource(badgePath))
您的路径为空。请使用图像路径初始化它

当你试图得到一个图像时,你应该给出一个路径。现在它是
null
。在减速时给出一条路径或在使用它之前给它赋值可以解决您的问题

  String badgePath="some/valid/path";

好的,这是否意味着我应该因为badgeIMG上的(字符串路径)而放弃badgePath,并尝试通过badgeIMG allOrNothingBadge=new badgeIMG();声明文件路径;?您应该使用:
BadgeIMG allOrNothingBadge=new-BadgeIMG(“path/to/your/image/here.png”)仅供参考这是JDK-9中修复的。