2016-11-11 61 views
4

我目前正在開發一個Swing桌面應用程序。此應用程序還使用由SystemTray of dorkbox處理的托盤圖標。的Java/Swing的:Desktop.open()導致GTK-ERROR

現在我需要打開與默認應用程序文件。爲了達到這個目的,我使用這樣的AWTDesktop.open()方法。

if (Desktop.isDesktopSupported()) { 
    System.out.println("Get desktop."); 
    Desktop desktop = Desktop.getDesktop(); 
    System.out.println("Got desktop."); 
    desktop.open(file); 
} 

但現在這裏來了問題:在某些設備上(這顯然有GTK2和GTK3安裝此幾行應用程序崩潰 - 程序崩潰,同時執行與一個gtk-error ** gtk+ 2.x symbols detected. using gtk+ 2.x and gtk+ 3 is not supportedDesktop.isDesktopSupported()

要。說實話,我不知道到底是怎麼回事錯在這裏 - 。但如果只安裝GTK3應用程序運行就像一個魅力的SystemTray好像是用GTK3以及因爲我沒有明確地將它設置爲使用GTK2 所以,什麼導致這種混合的GTK2和3?有沒有辦法迫使Desktop類使用正確的 GTK版本(與其他應用程序一樣)?

+0

如果GTK 2和GTK 3具有相同的名字(我猜他們這樣做)的一些庫文件,無一不是在庫路徑,我希望任何GTK 3應用程序報告此錯誤。 – VGR

+0

顯然情況並非如此。有趣的問題是:爲什麼'AWT'的一部分使用'GTK3'作爲'swing'的另一部分使用'GTK2'(反之亦然)。 – FlashTek

+0

你的應用程序是如何啓動的?我試圖建議在您的環境中修改LD_LIBRARY_PATH。 – VGR

回答

2

這不會解決當前的問題,但還有另一種方式來打開文件,默認的應用程序。

在Windows上:

Runtime.getRuntime().exec("C:\SomeFolder\Somefile.txt"); 

在Mac和Linux:

Runtime.getRuntime().exec("xdg-open /folder/file.txt"); 

希望它會幫助你,如果你不解決你目前的問題。

+0

但是,如果用戶沒有安裝xdg實用程序,這將無法正常工作嗎? – FlashTek

+0

在Mac上它只是「open」,而不是「xdg-open」。 – andlabs

+0

但依靠'XDG-open'似乎沒有是最好的方式,這是不必安裝... – FlashTek