是ImageIO的write()方法吗?

是ImageIO的write()方法吗?

问题描述:

在我用java开发的应用程序中,我使用ImageIO API来缩放图像,然后将它们写入目录,然后通知Web服务器图像已准备好使用。在向Web服务器发送信号之前的最后一次调用是ImageIO.write()方法,但Web服务器当时无法找到生成的图像。 (Web服务器能够看到它们几毫秒。)。是ImageIO的write()方法吗?

我怀疑ImageIO.write()是异步运行的。我搜索了很多,但我找不到如果ImageIO.write()是同步或异步操作。如果ImageIO.write()没有阻塞程序的流程,是否有一种非黑客的方式让它等到图像写入目标目录为止?

+0

据我所知,这是一个阻塞调用...你可以分享一些代码和一些细节教育部您regardig如何信号的网络服务器 – jsshah 2012-08-07 09:16:46

+0

基本上它是这样工作的。 Web服务器应用程序向缩放的Java应用程序发送缩放图像的请求。这是通过HTTP,因为我的Java应用程序已嵌入码头。在Jetty的handleRequest中,我生成新的缩放图像并将其保存到文件系统。发生这种情况后,jetty java应用程序响应(等待)Web服务器,指示它已完成保存新的缩放图像。 – 2012-08-07 20:38:09

+0

任何解决方案? – znlyj 2015-06-01 10:54:42

我无法想象ImageIO.write没有阻塞。

我的“假设”基于这样的事实:ImageIO.write可以抛出异常,这表明即使它在后台写入,也需要阻塞,直到写入完成以抛出异常。

这可能是一个缓冲问题?

尝试做一个while (!file.exits()) Thread.sleep(25)或某事有一个权宜

+0

试过我自己也没有得到任何结果,因为看起来文件确实存在。 – 2012-08-07 20:38:39

+0

Sooo ...我想这与Web服务器能够看到它自己的虚拟上下文(即任何可能已添加的新文件)的更改所需的时间有关。在强制延迟(Thread.sleep(...))中添加一个小的缓慢变大的值可能是值得的,直到您可以找到Web服务器实际识别新文件的最佳位置。或者在返回时检查Web服务器正在做什么,因为它可能实际上是这方面的问题:P – MadProgrammer 2012-08-07 21:08:25