我正在编写一个需要截取用户屏幕截图的应用程序。 我正在使用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