我正在編寫一個需要截取用戶屏幕截圖的應用程序。 我正在使用Robot類和createScreenCapture方法來實現此目的。java - 已截圖,但未授予權限?
正如Javadoc所述,需要readDisplayPixels
權限才能截取屏幕截圖。
然後我繼續嘗試在嘗試截取屏幕之前檢查權限。 我準備了一些代碼來顯示我所做的:
import java.awt.AWTPermission;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
public class ScreenshotTest {
public static void main(String[] args) {
try {
new SecurityManager().checkPermission(new AWTPermission("readDisplayPixels"));
} catch (SecurityException e) {
System.out.println("Permission not granted!");
}
try {
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
BufferedImage capture = new Robot().createScreenCapture(screenRect);
System.out.println("Screenshot taken!");
} catch (Exception e) {
System.out.println("Taking screenshot failed.");
}
}
}
控制檯打印輸出:
Permission not granted!
Screenshot taken!
我很困惑,現在,因爲我沒想到這樣的事情發生。 createScreenCapture
方法不應該拋出異常,因爲未授予權限?
什麼是第一個try/catch塊中'SecurityException e'的堆棧跟蹤? – Mateusz
@Mateusz堆棧跟蹤:java.security.AccessControlException:訪問被拒絕( 「java.awt.AWTPermission」 「readDisplayPixels」) \t在java.security.AccessControlContext.checkPermission(來源不明) \t在java.security.AccessController.checkPermission (Unknown Source) \t at java.lang.SecurityManager.checkPermission(Unknown Source) \t at exp.ScreenshotTest.main(ScreenshotTest.java:12) – quantumbyte