/* Examples: * BrowserControl.displayURL("http://www.javaworld.com") * BrowserControl.displayURL("file://c:\\docs\\index.html") * BrowserContorl.displayURL("file:///user/joe/index.html"); * * Note - you must include the url type -- either "http://" or "file://". */ package NormsTools; import java.io.*; import java.util.*; import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; //import com.apple.mrj.MRJFileUtils; // For Mac public class BrowserControl { // ---------- Define constants: public static final String FileProtocol = "file://"; // Used to identify the windows platform. private static final String WIN_ID = "Windows"; // The default system browser under windows. private static final String WIN_PATH = "rundll32"; // The flag to display a url. private static final String WIN_FLAG = "url.dll,FileProtocolHandler"; // For NT ??? "cmd /c Notepad.exe D:\\temp\\test.txt" // Id mac private static final String Mac_ID = "Mac OS"; // The default browser under unix. private static final String UNIX_PATH = "netscape"; // The flag to display a url. private static final String UNIX_FLAG = "-remote openURL"; final static boolean debug = false; //true; // For testing /** * Display a file in the system browser.If you want to display a * file, you must include the absolute path name. * * @param url the file's url (the url must start with either "http://" or * "file://"). */ public static void displayURL(String url){ boolean windows = isPlatform(WIN_ID); boolean mac = isPlatform(Mac_ID); String cmd = null; try{ if (windows){ // cmd = 'rundll32 url.dll,FileProtocolHandler http://...' cmd = WIN_PATH + " " + WIN_FLAG + " " + url; if(debug) System.out.println("cmd=" + cmd); Process p = Runtime.getRuntime().exec(cmd); }else if(mac) { System.out.println("On Mac, trying to open " + url); // MRJFileUtils.openURL(url); // Following copied from BrowserLaunch.java by: // * @author Eric Albert (ejalbert@cs.stanford.edu) // * @version 1.4b1 (Released June 20, 2001) try { Class mrjFileUtilsClass = Class.forName("com.apple.mrj.MRJFileUtils"); Method openURL = mrjFileUtilsClass.getDeclaredMethod("openURL", new Class[] { String.class }); openURL.invoke(null, new Object[] { url }); } catch (InvocationTargetException ite) { throw new IOException("InvocationTargetException while calling openURL: " + ite.getMessage()); } catch (IllegalAccessException iae) { throw new IOException("IllegalAccessException while calling openURL: " + iae.getMessage()); }catch(ClassNotFoundException cnfx) { System.err.println("Class.forName error " + cnfx); }catch(NoSuchMethodException nsmx) { System.err.println("Method.getDeclaredMethod error " + nsmx); } }else{ // Under Unix, Netscape has to be running for the "-remote" // command to work.So, we try sending the command and // check for an exit value.If the exit command is 0, // it worked, otherwise we need to start the browser. // cmd = 'netscape -remote openURL(http://www.javaworld.com)' cmd = UNIX_PATH + " " + UNIX_FLAG + "(" + url + ")"; Process p = Runtime.getRuntime().exec(cmd); try{ // wait for exit code -- if it's 0, command worked, // otherwise we need to start the browser up. int exitCode = p.waitFor(); if (exitCode != 0){ // Command failed, start up the browser // cmd = 'netscape http://www.javaworld.com' cmd = UNIX_PATH + " "+ url; p = Runtime.getRuntime().exec(cmd); } }catch(InterruptedException x){ System.err.println("Error bringing up browser, cmd='" + cmd + "'"); System.err.println("Caught: " + x); } } // end non Windows code //cmd= rundll32 url.dll,FileProtocolHandler file://D:/www/index.html // System.out.println("cmd= " + cmd); }catch(IOException x){ // couldn't exec browser System.err.println("Could not invoke browser, command=" + cmd); System.err.println("Caught: " + x); } } // end displayURL /** * Try to determine whether this application is running under Windows * or some other platform by examing the "os.name" property. * * @return true if this application is running under a Windows OS */ public static boolean isPlatform(String id){ String os = System.getProperty("os.name"); if ( os != null && os.startsWith(id)) return true; else return false; } // end /** --------------------------------------- * Simple example. Comment out when done testing */ public static void main(String[] args) { // displayURL("http://www.javaworld.com"); // displayURL("file://D:/www/index.html"); displayURL("http://127.0.0.1:8080"); System.exit(0); } // end main() */ } // end class /* Running: java NormsTools.BrowserControl -D cmd=rundll32 url.dll,FileProtocolHandler http://127.0.0.1:8080 >>> This starts IE with error msg: Problem with shortcut. Unable to open http://127.0.0.1:8080 ??? 0 error(s) */