2016-11-11 68 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