java.awt.Robot.createScreenCapture无法在最后一个JRE的多屏幕配置上工作(8)

时间:2014-04-04 15:31:24

标签: java awtrobot

我的计算机上插有两个屏幕。 我尝试在每个屏幕上进行屏幕捕获。 我正在使用以下代码:

GraphicsDevice[] screens = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();  //same screens[] with JRE7 and JRE8

Robot rbt0 = new Robot(screens[0]);
BufferedImage image0 = rbt0.createScreenCapture(new Rectangle(0,0,1024,1024));

Robot rbt1 = new Robot(screens[1]);
BufferedImage image1 = rbt1.createScreenCapture(new Rectangle(0,0,1024,1024));
  • 在JRE7上,每个捕获都在右侧屏幕上执行:image0和image1不同。
  • 在JRE8上,两个屏幕的捕获是相同的:image0和image1是相同的可视图像(它们都是屏幕0的图像)。

javadoc没有提到JRE8上有一个关于Robot类的新功能。 这是JRE8的错误吗?有人有同样的问题吗? 如果确认此错误,我该如何将此问题传达给Oracle?

谢谢大家,

此致

1 个答案:

答案 0 :(得分:1)

机器人计算屏幕坐标的方式已经改变了。

针对Java 8的javadoc提出了以下错误,这可能解释了您的问题。

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8033128

看起来这个改变是故意的,不是一个错误。

要捕获第二个屏幕,您可能需要按第一个屏幕的大小来偏移位置。

Robot rbt1 = new Robot(screens[1]);
BufferedImage image1 = rbt1.createScreenCapture(new Rectangle(1024,0,1024,1024));