Toolkit.getImage()的正确路径是什么?

时间:2011-09-06 11:19:34

标签: java awt

我需要上传一个图像文件,并在我的JSF webapplication中为上传的文件生成缩略图。原始图像以/home/myname/tomcat/webapps/uploads存储在服务器上,而缩略图存储在/home/myname/tomcat/webapps/uploads/thumbs中。我正在使用从philreeve.com复制的缩略图生成器类。

我已在BalusC的帮助下成功上传了该文件。但是使用Toolkit.getImage(),我无法访问该图片。

我使用了上传文件的绝对路径,如下所示:

inFilename = file.getAbsolutePath();

缩略图生成器的相关代码是:

public static String createThumbnail(String inFilename, String outFilename, int largestDimension) {
    ...
    Image inImage = Toolkit.getDefaultToolkit().getImage(inFilename);
    if (inImage.getWidth(null) == -1 || inImage.getHeight(null) == -1) {
        return "Error loading file: \"" + new File(inFilename).getAbsolutePath() + "\"";
    }
    ...
}

由于我已经在使用绝对路径,所以我不明白为什么它不起作用。我还为inFilename使用了以下值,但我总是得到“加载文件时出错......”。

  • /home/myname/tomcat/webapps/uploads/filename.ext
  • /uploads/filename.ext

但是我检查了目录,图像在那里。 (我使用/home/myname/tomcat/webapps/uploads/filename.ext上传,但它确实有效。)该目录中图像的正确路径是什么?谢谢。

更新

我使用以下代码来处理代码:

Image inImage = ImageIO.read(new File(inFilename));

我仍然不明白为什么Toolkit.getImage()不起作用。

3 个答案:

答案 0 :(得分:2)

你确定它是一个JPEG文件吗?使用图像查看器确保在上传过程中文件没有发生任何不良事件(或者它是一个开头的图像)。

另外,使用new File(inFilename).exists()确保路径正确。我还建议在错误消息中打印new File(inFilename).getAbsolutePath(),因为相对路径会伤害你。

那就是说,其余的代码看起来都是正确的。

答案 1 :(得分:2)

问题是Toolkit.getImage()不会立即返回图像。这个问题在this bug report中有详细描述,其相关摘录在此处:

  

这不是错误。提交者没有正确使用异步   图像API正确。他假设getImage加载了所有图像的位   进入记忆。但是,有充分证据表明实际装载了   在调用Component.prepareImage或之前,不会发生位   Graphics.drawImage。另外,这两个函数在之前返回   图像已满载。开发人员需要安装ImageObserver   监听Image已完全加载的通知。一旦他们   收到此通知后,他们可以重新绘制图片。

我发现this question的答案效果很好:

Image image = new ImageIcon(this.getClass().getResource("/images/bell-icon16.png")).getImage();

答案 2 :(得分:0)

可能是访问权限问题?您确定您的脚本有权阅读或查看文件吗?