2012-07-24 149 views
1

我們有一個在Linux機器上運行的全屏Java程序。該程序一直在運行,並且是Linux盒子存在的主要原因。如何從Java Runtime.exec(命令)打開程序總是在最前

我們有一堆可以通過下拉菜單打開的程序的PDF幫助文件。當用戶點擊我們打開XPDF幫助菜單項,通過

final Runtime rt = Runtime.getRuntime(); 
    final String cmd = "runxpdf.sh"; 
    rt.exec(cmd); 

只是如果用戶同時XPDF觀衆正在運行,則屬於我們的全屏程序顯示器後面點擊我們的節目這一切工作正常。

我們希望能夠將XPDF程序保持在最前,直到它關閉。這可能通過從Java執行程序來完成嗎?

回答

2

問題是,您需要與不同的程序(窗口管理器)進行通信,以指示該程序保持窗口不變。

在基於X窗口的系統中,過去有一種稱爲wmctrl的工具,它可以向當前的窗口管理器發出請求和查詢,只要它是兼容的窗口管理器。我使用這種工具混合了結果。在20個左右的Linux窗口管理員中,最受歡迎的人在處理請求方面做得更好(可能這就是爲什麼他們很受歡迎?)。

的命令切換桌面窗口,提高和重點是

wmctrl -i -a <Window Id> 

要獲得由窗口管理

wmctrl -l 

雖然這種管理窗口的列表將不能保證「始終在頂部「,你可以編寫一個Thread循環來檢查和重新建立一個窗口。

就Windows解決方案而言,其他人將不得不對此發表評論。

+0

請注意,許多系統上未安裝wmctrl,因此可能需要安裝它。另外,我並不知道100%的Java庫可能會進行相同的調用,而且我也沒有研究(假定網絡)調用的基本機制。 – 2012-07-24 16:28:44

+0

是的,這聽起來對我來說是正確的,我已經在fluxbox的密鑰文件中使用了wmctrl,以便在過去的鼠標/鍵盤組合中將各種事物帶到頂端。 – lynks 2012-07-24 16:43:02

2

一點點切線,但我認爲值得一試 - 您是否考慮過直接從Java中顯示PDF?然後您可以更多地控制窗口,例如與JFrame的setAlwaysOnTop(布爾值)。有些PDF顯示選項在here討論。

+0

是的,這是我們正在研究的選項之一,但是當時我們選擇了xpdf(幾年前),我們嘗試的基於java的pdf顯示器似乎是越野車。可能是時候再看一次。 – Garrett 2012-08-22 14:25:02