2014-04-24 89 views
0

我使用this code在java中生成屏幕截圖。我使用每秒約5-10次的方法,從屏幕截圖中計算出一些值並將它們發送出去,所以我不存儲屏幕截圖。這可以在一段時間(10-30分鐘)內正常工作,但該方法返回null,因爲bufferedImageFromBitmap方法中的該行ok = GDI.GetDIBits(blitDC, outputBitmap, 0, raster.getHeight(), pixels, bi, 0);返回false。JNA ScreenShot:GetDIBits在一段時間後返回false

如果我再次調用該方法,它將再次返回空值。
如果JNA方法失敗,但試圖使用java.awt.Robot,但隨後引發OutOfMemoryException(我試過System.gc()並給程序更多內存,但異常仍然拋出。 ),但在taskmanager中,我沒有看到該程序使用更多的內存。

你知道我能做什麼嗎(fix/workaround/...)?

+0

您引用的代碼爲每次調用分配緩衝區(並可能取消分配)。你最好分配一次並重用緩衝區。 – technomage

回答

0

問題是解決了由於technomage
如果我打電話windowDC = GDI.GetDC(USER.GetDesktopWindow());只有一次,然後再用windowDC,也不會停止工作。

相關問題