有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java输入==加载图像时为空

我一直在尝试加载一个图像,它在eclipse中运行良好。但是,在编译后运行它时,它会在input==null时崩溃。获取图标的方法如下:

public ImageIcon getIcon(String iconName){
    InputStream imageStream = this.getClass().getClassLoader().getResourceAsStream("images"+File.separator+iconName);
    InputStream t = this.getClass().getClassLoader().getResourceAsStream("images");

    Image image = null;
    try
    {
        image  = ImageIO.read(imageStream);
        return new ImageIcon(image);
    }
    catch(IOException e){
        return null;
    }
    catch(IllegalArgumentException e){
        System.out.println(e.getMessage());
        System.out.println("Image folder stream: Im"+t);
        System.out.println("Image folder + image stream: "+imageStream);
        return null;
    }
}

控制台输出为:

input == null!
Image folder stream:sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@14b4656e
Image folder + image stream: null
input == null!
Image folder stream:sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@3a81e634
Image folder + image stream: null

我读过与我相同错误的其他线程,但我无法解决它。任何帮助都将不胜感激,谢谢


共 (2) 个答案

  1. # 1 楼答案

    几乎可以肯定,这是类路径的问题

    imageStream变量为null,因此您的类加载器无法找到并加载该文件。从那时起,这种方法注定要失败

    在IDE中运行时,Eclipse将帮助您设置路径,这意味着它可以正常运行。当您在命令行上运行它时,您需要确保您的类路径与Eclipse的相匹配

    我假设您有一个“images”文件夹,其中包含各种图像,但它是否可以在编译的JAR中使用,或者作为run命令的类路径中的元素使用

  2. # 2 楼答案

    getResource[AsStream]()需要一个/分隔的路径。总是不管你的平台是什么。不要使用File.separator。使用/