我使用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/...)?
您引用的代碼爲每次調用分配緩衝區(並可能取消分配)。你最好分配一次並重用緩衝區。 – technomage