2012-06-22 48 views
0

我从SWT浏览器中提取了页面并将其导出到图像。我的问题是,当shell不可见时,我无法正确导出它。我怎样才能隐藏浏览器并让图像正确导出?如何隐藏SWT浏览器或以无头模式运行?

我已经尝试设置shell.Visible()为false,但这样会扰乱图像导出。

这是我如何导出图像(不知道这是有必要的问题):

GC source = new GC (shell); 
Image image = new Image(display, browser.getClientArea()); 
source.copyArea(image, 0, 0); 
ImageLoader io = new ImageLoader(); 
io.data = new ImageData[] { image.getImageData() }; 
File f = new File (currentDir+"/workpng.png"); 
io.save (f.getAbsolutePath(), SWT.IMAGE_PNG); 

回答

2

这可能是不可能的,因为X服务器/ Windows将扔掉所有的渲染命令时,该窗口ISN不可见(渲染你看不到的东西没有意义)。

在这种情况下浏览器的客户端区域是什么?

为了做到这一点,您需要允许shell可见(即不被其他窗口隐藏)。像詹金斯这样的工具使用一个插件,用XvfbXvnc开始X会话。在设置env变量DISPLAY后,所有UI渲染都转到这些会话。

+0

嗯我明白了。所以这也需要xserver。我记得你提到过SWTBot,我可以用它来以无头模式运行SWT浏览器。你有什么建议吗? browser.getClientArea()返回一个矩形对象。这是它为我返回的结果:'Rectangle {0,0,600,400}' – KrispyDonuts

+0

您是否知道可以在不连接监视器的情况下运行X服务器?这篇博客文章可能有所帮助:https://community.jboss.org/wiki/RunningEclipsePluginTestsWithSWTBotInHeadlessMode –