当前位置: 首页 > 知识库问答 >
问题:

ImageIO引发非法参数异常。阅读

楚翰
2023-03-14

基本上,我试图加载一些图像数据到java作为ImageIcon对象。我最初尝试简单地做ImageIcon图像=新ImageIcon(文件名),但这使得图像在导出为JAR文件时不会加载。我做这件事的新方法是:

private static ImageIcon getImage(String filename) {
    try {
        URL url = PacMan.class.getResource(filename);
        Image image = ImageIO.read(url);
        return new ImageIcon(image);
    }
    catch (IOException e) {
        e.printStackTrace();
    }

    return null;
}

这个错误是因为吃豆人。班getResource(文件名)返回null。我的目录是这样的:我的PacMan类位于src/Model/PacMan中,我的映像具有以下文件路径:

src/Model/PacMan_Images/PacMan_EAST, 
src/Model/PacMan_Images/PacMan_SOUTH, 
src/Model/PacMan_Images/PacMan_WEST, 
src/Model/PacMan_Images/PacMan_NORTH. 

此外,我还尝试恢复使用新的ImageIcon(文件路径),图像加载良好,因此我知道该图像存在于我的目录中。有人知道可能是什么问题吗?

编辑:我的错误是我得到了一个IllegalArgumentException抛出,因为我传递null作为ImageIO的参数。读取(url),因为url为空。

共有2个答案

娄嘉石
2023-03-14

错误是我传递的文件名是Model/PacMan_Images/PacMan_EAST,而不是/Model/PacMan_Images/PacMan_EAST。事实证明,额外的/真正的改变。感谢@MadProgrammer的帮助,@paulsm4提供了额外的资源,以及所有发表评论的人。

宦飞
2023-03-14

如果路径根“/src”真的被导入到您的应用程序中,我会感到惊讶。罐子请试试这个:

>

  • 看看. jar里面。例如,使用7Zip查看文件的实际路径。

    尝试将文件名更改为“Model/PacMan_Images/PacMan_EAST”。

    有关Java getResource()的更多详细信息,请参见此处:

    http://www.novixys.com/blog/read-file-resources-folder-java/

    https://docs.oracle.com/javase/8/docs/technotes/guides/lang/resources.html

    JavaSwing:在Jar中显示图像

    增编:

    >

  • 我会下载7-Zip并检查您的. jar文件,只是为了熟悉格式。它只是一个. zip文件...但是了解它里面的内容并能够修改它(如果只是为了故障排除)通常是有用的。

    下面是关于“Class.getResource”(可以采用“相对”资源名称)和“绝对资源”(必须有斜杠)的精彩讨论:

    这两门课的区别是什么。getResource()和类加载器。getResource()?

    最后,这里有一个重构代码以避免编译器警告的建议:

    private static ImageIcon getImage(String filename) {
        ImageIcon imageIcon = null;
        try {
            URL url = PacMan.class.getResource(filename);
            Image image = ImageIO.read(url);
            imageIcon = new ImageIcon(image);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return imageIcon;
    }
    

    还有许多其他选项,包括仅禁用该特定警告(例如:[警告]

  •  类似资料:
    • 我正在处理一个非常简单的point类,但我得到了一个错误,我无法确定字符串/双值问题发生的位置或如何修复它。 编辑 我忘记添加我正在接收的错误:

    • 问题内容: 我正在Ubuntu 16.04上使用最新版本的Elasticsearch,但在将数据放到上面时遇到了一个小问题。 这是我的json文档(相关部分) 这是当我尝试“ PUT http:// localhost:9200 / aws ” 时从ES返回的响应 在我看来,ES认为“ clockSpeed”是某种设置…?我希望使用动态映射来加快此过程,而不是先映射所有文档,然后将其导入ES。 有

    • 在Java jar上运行JUnit5测试并加载依赖项时,会出现警告 当我去看dumpstream时,它充满了评论,比如: 解决了依赖项加载问题,但未解决损坏的流。

    • 问题内容: 这是我的用法- 另外,我在http GET周围放置了一个finally块- 这是我的堆栈跟踪- 我正在使用Quartz计划监视Http端点的工作。这是我的连接池配置 Maven依赖..工件版本 编辑 -好吧,通过不关闭finally块中的CloseableHttpClient,问题解决了。有人能说出为什么这样吗? 如果关闭客户端,为什么连接池会关闭? 是上面的closeablehttp

    • 问题内容: 如果参数无效,如何使用JSR-303验证方法参数并引发异常? 例如像这样:? 现在,我检查方法主体中的每个方法参数,例如 而且我觉得这很丑。 PS作为参考实现,我使用Hibernate-validator 4.1.0.Final 问题答案: 如果可以升级到Hibernate Validator 4.2.0或更高版本,则可以使用其方法验证功能,该功能为方法参数和返回值的验证提供支持。 可

    • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u