【问题标题】:Taking screenshot with Java applet using Java Robot class not working使用 Java Robot 类使用 Java 小程序截屏不工作
【发布时间】:2011-07-06 07:39:18
【问题描述】:

我正在使用 Java 小程序截取 Web 浏览器的屏幕截图,使用 Java 的 Robot 类。

Robot objRobot = new Robot ();
BufferedImage objBufferedImage = objRobot.createScreenCapture(objRectArea); 

这个东西在Windows系统下运行良好,截图。但在 Mac OS X 的情况下,我得到一个空白图像。

当我检查事件查看器时,我看到以下错误:

invalid context
invalid pixel format
CoreAnimation: rendering error 506

所有浏览器 Safari、Firefox 和 Chrome 都会出现此问题。我的小程序是一个签名的小程序。

可能是什么原因?

我的机器配置如下:

OS : MAC OS X
Version : 10.6.4

【问题讨论】:

标签: java applet screenshot awtrobot


【解决方案1】:

我已将错误消息 invalid pixel format 发送给 google,并收到一长串结果(接近 10.000) - 看起来问题不是 Java 问题,而是 Mac 上的配置问题。

尝试更改显示分辨率并重新运行您的小程序。很有可能,该错误与某些屏幕分辨率(外部显示器?)有关。网络上的一些建议是全面更新您的 OSX。

【讨论】:

  • 感谢 Andreas_D.. 将 mac osx snowleopard 从 10.3 更新到 10.6 的想法对我有用。
  • 嘿,我面临着类似的问题,我想使用在 kubernets 集群中运行的 selenium 网格运行类似的脚本。任何线索都受到高度赞赏。提前致谢
【解决方案2】:
dir Robot objRobot = null;
                 try
                 {
                    objRobot = new Robot();
                 } catch(Exception ex)
                 {

         }

Dimension screenDim =  Toolkit.getDefaultToolkit().getScreenSize(); 

BufferedImage objBufferedImage =  objRobot.createScreenCapture(new Rectangle(0, 0, (int)screenDim.getWidth(), (int)screenDim.getHeight()));

int areaToExportWidth = 1024;
int areaToExportHeight = 768;

//Create the image 
BufferedImage exportImage =objRobot.createScreenCapture(new Rectangle(0, 0, (int)screenDim.getWidth(), (int)screenDim.getHeight()));

//Get graphics - Get the layer we can actually draw on
Graphics2D imageGraphics = (Graphics2D) exportImage.getGraphics();



//Cleanup after ourselves
imageGraphics.dispose();

//Setup to write the BufferedImage to a file
String pathToFile = "dir";
File outputDirectory = new File(pathToFile);
File outputFile = new File(pathToFile+"\\"+counter+"MyImage.png");
//Here we make sure the directory exists.
/*
 * Returns TRUE if:
 *  The directory is MISSING
 *  and/or the directory IS NOT a directory
 */
if(!outputDirectory.exists() || !outputDirectory.isDirectory()){
    outputDirectory.mkdirs(); //Make the directory
} // Else do nothing

//Write the file
try { //Attempt the write
    ImageIO.write(exportImage, "png", outputFile);
} catch (IOException e) { //For some reason it failed so...
    e.printStackTrace(); //... why did it fail?
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 2011-08-15
    • 2011-10-04
    • 2011-11-04
    相关资源
    最近更新 更多