Java 图像IO异常

Java 图像IO异常,java,javax.imageio,Java,Javax.imageio,我得到以下错误: javax.imageio.IIOException: Can't read input file! Resource not found: C:\icon.gif at javax.imageio.ImageIO.read(ImageIO.java:1301) at connector.SystemTrayCreator.createImage(SystemTrayCreator.java:98) at connector.SystemTrayCreator.create(S

我得到以下错误:

javax.imageio.IIOException: Can't read input file!
Resource not found: C:\icon.gif
at javax.imageio.ImageIO.read(ImageIO.java:1301)
at connector.SystemTrayCreator.createImage(SystemTrayCreator.java:98)
at connector.SystemTrayCreator.create(SystemTrayCreator.java:36)
at connector.Start.main(Start.java:14)
Exception in thread "main" java.lang.IllegalArgumentException: creating TrayIcon with     null Image
at java.awt.TrayIcon.<init>(TrayIcon.java:168)
at connector.SystemTrayCreator.create(SystemTrayCreator.java:36)
at connector.Start.main(Start.java:14)
Java Result: 1

我确信这条路是正确的。而且,名称匹配


有人知道出了什么问题吗?

您的代码似乎很好。理论上可能存在两个问题:

  • 文件权限问题。可能将文件放在驱动器根目录以外的其他位置,并明确检查其权限。您可以直接从代码中调用
    canRead()
    ,这就是
    ImageIO.read
    的作用。它必须返回
    true

  • 路径
    参数的末尾可能有一些空格。使用
    trim()
    消除这种可能性


  • 根据堆栈跟踪,
    createImage()
    方法返回null,然后
    TrayIcon
    构造函数对此有问题。您确定文件位于该位置吗?它返回
    null
    ,因为它的try块无法加载图像。我们需要解释这一失败。它的stacktrace是输出转储中的第一个。是的,我确信文件位于该位置。另外,我不认为您需要更多的代码,我只使用该方法中的路径@Marko Topolnik你可以看到我得到的输出,但这也帮不了我更多…我想我也有同样的问题。你曾经解决过这个问题吗?我把这个文件放在我自己的用户目录中,但它仍然给出相同的错误。关于trim()的建议很明智,尽管这不是问题所在……请努力使
    canRead()
    返回
    true
    。我真的看不出你的代码有任何问题。我也没有。谢谢。你是不是碰巧从浏览器中的小程序执行了这段代码?这可以解释很多。不,在本地执行。即使尝试将它放在C:\或C:\用户\用户名\文档中,它仍然无法读取。更奇怪的是,我实际上能够以完全相同的方式读写其他文件。这一个根本看不懂。
    final TrayIcon trayIcon = 
                new TrayIcon(createImage("C:\\icon.gif", "Tray icon"));
    
    protected static Image createImage(String path, String description) {
        Image image = null;
    
        try {
            File f = new File(path);
            image = ImageIO.read(f);
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        if (image == null) {
            Debugger.showMessage("Resource not found: " + path);
            return null;
        } else {
            return (new ImageIcon(image, description)).getImage();
        }
    }