2016-11-11 10 views
4

В настоящее время я разрабатываю приложение для рабочего стола Swing. Это приложение также использует значок в трее, который обрабатывается SystemTray of dorkbox.Java/Swing: Desktop.open() вызывает GTK-ERROR

Теперь мне нужно открыть файл с помощью приложения по умолчанию. Для этого я использую метод Desktop.open()AWT следующим образом.

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

Но теперь здесь возникает проблема: На некоторых устройствах (которые, очевидно, имеют GTK2 и GTK3 установлены эти несколько строк делают сбой приложения - сбои программы при выполнении Desktop.isDesktopSupported() линии с gtk-error ** gtk+ 2.x symbols detected. using gtk+ 2.x and gtk+ 3 is not supported

Чтобы быть. честно говоря, я понятия не имею, что здесь происходит, но если только 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