Staging
v0.8.1
v0.8.1
https://repo1.maven.org/maven2/org/prefuse/prefuse
BrowserLauncher.java
package prefuse.util.ui;
import java.io.IOException;
import java.net.URL;
/**
* <p>
* Browser launcher will open a URL in an external browser on your system.
* (e.g. Internet Explorer or Netscape). If your browser is already open,
* a new browser window should be created without starting any new processes.
* </p>
*
* <p>
* On Windows systems the system's default browser will be used. On UNIX and other
* platforms the browser defaults to Netscape. For this default behavior to work,
* the command 'netscape' must be on your path.
* </p>
*
* <p>
* This class was inspired by an article at www.javaworld.com by Steven Spencer.
* The article is available at
* <a href="http://www.javaworld.com/javaworld/javatips/jw-javatip66.html">
* http://www.javaworld.com/javaworld/javatips/jw-javatip66.html
* </a>.
* </p>
*
* @author Steven Spencer
* @author jeffrey heer (adapted original author's code)
*/
public abstract class BrowserLauncher {
private static final String WIN_ID = "Windows";
private static final String WIN_PATH = "rundll32";
private static final String WIN_FLAG = "url.dll,FileProtocolHandler";
private static final String UNIX_PATH = "netscape";
private static final String UNIX_FLAG = "-remote openURL";
/**
* Display a file in the system browser.
* @param url the file's url
*/
public static void showDocument(URL url) {
showDocument(url.toString());
}
/**
* 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 showDocument(String url) {
boolean windows = isWindowsPlatform();
String cmd = null;
try {
if (windows) {
// cmd = 'rundll32 url.dll,FileProtocolHandler http://...'
cmd = WIN_PATH + " " + WIN_FLAG + " " + url;
Runtime.getRuntime().exec(cmd);
} 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);
}
}
} catch (IOException x) {
// couldn't exec browser
System.err.println("Could not invoke browser, command=" + cmd);
System.err.println("Caught: " + x);
}
}
/**
* 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 isWindowsPlatform() {
String os = System.getProperty("os.name");
return (os != null && os.startsWith(WIN_ID));
}
/**
* Opens the URL specified on the command line in
* the system browser.
* @param argv argument array. Only the first argument is considered.
*/
public static void main(String[] argv) {
showDocument(argv[0]);
}
} // end of class BrowserLauncher