2012-08-07 34 views
3

在我用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

回答

0

我無法想象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

相關問題