Witam,
tworzę w NetBeans6.0.1 projekt który wymaga uruchomienia domyślnej przeglądarki z określonym URL.
Naturalnym rozwiązaniem jest skorzystanie z klasy java.awt.Desktop. Aktualnie wygląda to u mnie następująco:
String url = "http://.........";
if (java.awt.Desktop.isDesktopSupported()) {
java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
if (desktop.isSupported(java.awt.Desktop.Action.BROWSE)) {
try {
desktop.browse(new URI(url));
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "Błąd I/O: Nie mogę uruchomić domyslnej przeglądarki internetowej\n\n" + ex.toString());
} catch (URISyntaxException ex) {
JOptionPane.showMessageDialog(this, "Problem z URL: Nie mogę uruchomić domyslnej przeglądarki internetowej\n\n" + ex.toString());
}
} else {
JOptionPane.showMessageDialog(this, "desktop.isSupported(java.awt.Desktop.Action.BROWSE) zwraca false :(((");
}
} else {
try {
Runtime.getRuntime().exec("firefox " + url);
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, "Nie udało się wywołanie aplikacji firefox :(((");
}
}
Pod Windows klasa Desktop działa poprawnie.
Pod Suse 10.3 + KDE 3.5.7 (wersja AMD64) zmuszony byłem skorzystać z klasy Runtime.
Moim zdaniem nie jest to eleganckie rozwiązanie. Użytkownik może nie posiadać aplikacji firefox, nie miec zdefiniowanej ścieżki do niego lub po prostu preferować inne rozwiązania.
Grzebiąc w googlach znalazłem informację z której moim zdaniem wynika, że KDE nie wspiera klasy Desktop.:
Java.awt.Desktop implementation does depend on current desktop environment. Currently it is supposed to work with Gnome, on Linux and Solaris 9+, other environment may or may not work. This is what Desktopn.isDesktopSupported() method is intended for
Informacja ma już równo 2 lata, poza tym nie jest zbyt precyzyjna.
Korzystam z JDK version "1.6.0_05"; Java HotSpot(TM) 64-Bit Server VM (build 10.0-b19, mixed mode)
Moje pytania są następujące:
- Czy faktycznie problemem jest KDE? może tylko kombinacja (...) jest trefna ?
- Jak ustalić, którą przeglądarkę uruchomić (i jak), gdy nie ma dostępnej klasy Desktop ?</url>