package org.peerbox.utils; ///////////////////////////////////////////////////////// // Bare Bones Browser Launch // // Version 3.1 (June 6, 2010) // // By Dem Pilafian // // Supports: // // Mac OS X, GNU/Linux, Unix, Windows XP/Vista/7 // // Example Usage: // // String url = "http://www.centerkey.com/"; // // BareBonesBrowserLaunch.openURL(url); // // Public Domain Software -- Free to Use as You Like // ///////////////////////////////////////////////////////// // Source: http://www.centerkey.com/java/browser/ // ///////////////////////////////////////////////////////// import java.io.IOException; import java.util.Arrays; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; /** * Based on Bare Bones Browser Launch (see header). * Modifications: xdg-open added, minor refactoring * * @author albrecht * */ public final class BrowserUtils { private BrowserUtils() { // prevent instances } private static final String[] browsers = { "xdg-open", "google-chrome", "firefox", "opera", "epiphany", "konqueror", "conkeror", "midori", "kazehakase", "mozilla" }; private static final String errMsg = "Error attempting to launch web browser"; public static void openURL(String url) { try { // attempt to use Desktop library from JDK 1.6+ Class<?> d = Class.forName("java.awt.Desktop"); d.getDeclaredMethod("browse", new Class[] { java.net.URI.class }).invoke( d.getDeclaredMethod("getDesktop").invoke(null), new Object[] { java.net.URI.create(url) }); // above code mimicks: java.awt.Desktop.getDesktop().browse() } catch (Exception ignore) { // library not available or failed try { if(OsUtils.isWindows()) { Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url); } else if(OsUtils.isOSX()) { Class.forName("com.apple.eio.FileManager") .getDeclaredMethod("openURL", new Class[] { String.class }) .invoke(null, new Object[] { url }); } else if(OsUtils.isLinux()) { String browser = null; for (String b : browsers) { if (browser == null && isExecAvailable(b)) // open page Runtime.getRuntime().exec(new String[] { browser = b, url }); } // no browser found if (browser == null) { throw new Exception("Could not open URL using browsers: " + Arrays.toString(browsers)); } } } catch (Exception e) { Alert dlg = DialogUtils.createAlert(AlertType.WARNING); dlg.setHeaderText(errMsg); dlg.setTitle(errMsg); dlg.setContentText(e.getMessage()); } } } private static boolean isExecAvailable(String exec) throws IOException { Process p = Runtime.getRuntime().exec(new String[] { "which", exec }); boolean isAvailable = p.getInputStream().read() != -1; return isAvailable; } }