2013-10-15 28 views
0

我有幾個線程正在運行,這些線程都需要不斷地拍攝不同區域的屏幕。每個線程都有自己的Robot實例。問題是,而不是每個線程異步採取鏡頭,他們似乎一次採取一個。例如,如果我只拍攝一張屏幕截圖,則只需要20-30毫秒左右。但是如果我有5個線程,並且他們都嘗試截取(屏幕的不同部分)屏幕截圖,那麼看起來需要100 - 150毫秒才能獲得所有5個屏幕截圖,清楚地表明儘管採用robot.createScreenCapture()方法,拍攝仍在同步進行被從不同的線程調用。我希望在20-30毫秒內拍攝所有5張截圖。在不同線程中異步截取Java中的截圖?

有沒有辦法使機器人異步工作並同時將屏幕截圖發送到每個線程?或不同的截圖異步的方法,這將在Windows中工作?

回答

1

至少在the OpenJDK implementationcreateScreenCapture是​​,因爲它使用底層操作系統調用來直接讀取屏幕緩衝區,所以不,這是不可能明確地這樣做。大概底層的圖形原語不是或不能保證是可重入的。

+0

爲什麼不能異步讀取緩衝區? –

+0

@ClickUpvote我認爲,因爲至少有一些窗口工具包不提供原子屏幕讀取操作;你將不得不尋找更多細節的'RobotPeer'的平臺實現的源代碼。 – chrylis

+0

我會好奇聽到Windows 7/Windows 8是否允許它,如果是這樣,我如何直接使用Windows API截圖,而不使用機器人。 –