Desktop API не поддерживается в Linux

Рейтинг: 3Ответов: 2Опубликовано: 15.04.2011

Задача в том, чтобы открывать файл или папку из java-приложения. Воспользовался советом на форуме. Но оказывается это не работает в Linux, т.к. Desktop.isDesktopSupported() == false. Как сделать, чтобы программа заработала и на Linux тоже?

Ответы

▲ 3Принят

Как-нибудь так:

try { 
  if (Desktop.isDesktopSupported() 
       && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) { 
    Desktop.getDesktop().browse(new URI(url)); 
  } else { 
    string os = System.getProperty("os.name"); 
    if (!(os.startsWith("Mac OS")) && !(os.startsWith("Windows"))) { 
      Runtime r = Runtime.getRuntime(); 
      for (String b : list /* google-chrome, firefox, opera */) { 
        Process p = r.exec(new String[]{"which", b}); 
        InputStream is = p.getInputStream(); 
        if (is.read() != -1) { 
          r.exec(new String[]{b, url}); 
          return;    
        } 
      } 
    } 
  } 
} catch (Throwable t) { 
}
▲ 3

Согласно информации с сайта oracle, в системе Linux данный функционал доступен только при наличии библиотек gnome. Если эти библиотеки не установлены, метод возвращает false.

Mожно попробовать просто запускать необходимую программу. Что то вроде:

Runtime.getRuntime().exec("/usr/bin/firefox www.hashcode.ru");