2012-06-22 49 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 –