|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectptolemy.actor.gui.BrowserLauncher
public class BrowserLauncher
BrowserLauncher is a class that provides one static method, openURL, which opens the default web browser for the current user of the system to the given URL. It may support other protocols depending on the system -- mailto, ftp, etc. -- but that has not been rigorously tested and is not guaranteed to work.
Yes, this is platform-specific code, and yes, it may rely on classes on certain platforms that are not part of the standard JDK. What we're trying to do, though, is to take something that's frequently desirable but inherently platform-specific -- opening a default browser -- and allow programmers (you, for example) to do so without worrying about dropping into native code or doing anything else similarly evil.
Anyway, this code is completely in Java and will run on all JDK 1.1-compliant systems without modification or a need for additional libraries. All classes that are required on certain platforms to allow this to run are dynamically loaded at runtime via reflection and, if not found, will not cause this to do anything other than returning an error when opening the browser.
There are certain system requirements for this class, as it's running through Runtime.exec(), which is Java's way of making a native system call. Currently, this requires that a Macintosh have a Finder which supports the GURL event, which is true for Mac OS 8.0 and 8.1 systems that have the Internet Scripting AppleScript dictionary installed in the Scripting Additions folder in the Extensions folder (which is installed by default as far as I know under Mac OS 8.0 and 8.1), and for all Mac OS 8.5 and later systems. On Windows, it only runs under Win32 systems (Windows 95, 98, and NT 4.0, as well as later versions of all). On other systems, this drops back from the inherently platform-sensitive concept of a default browser and simply attempts to launch Firefox via a shell command.
This code is Copyright 1999-2001 by Eric Albert (ejalbert@cs.stanford.edu) and may be redistributed or modified in any form without restrictions as long as the portion of this comment from this paragraph through the end of the comment is not removed. The author requests that he be notified of any application, applet, or other binary that makes use of this code, but that is more out of curiosity than anything and is not required. This software includes no warranty. The author is not responsible for any loss of data or functionality or any adverse or unexpected effects of using this software.
Credits:
Steven Spencer, JavaWorld magazine (Java//Tip 66)
Thanks also to Ron B. Yeh, Eric Shapiro, Ben Engber, Paul
Teitlebaum, Andrea Cantatore, Larry Barowski, Trevor Bedzek, Frank
Miedrich, and Ron Rabakukk
This code is from http://browserlauncher.sourceforge.net/
Red (cxh) |
Red (cxh) |
Field Summary | |
---|---|
private static java.lang.Class |
aeDescClass
The com.apple.MacOS.AEDesc class |
private static java.lang.reflect.Constructor |
aeDescConstructor
The |
private static java.lang.reflect.Constructor |
aeTargetConstructor
The |
private static java.lang.reflect.Constructor |
appleEventConstructor
The |
private static java.lang.Object |
browser
The browser for the system |
static boolean |
delayExit
Set to true if we copied a file out of a jar file so that the browser could display it. |
private static java.lang.String |
errorMessage
The message from any exception thrown throughout the initialization process. |
private static java.lang.String |
FINDER_CREATOR
The creator code of the Finder on a Macintosh, which is needed to send AppleEvents to the application. |
private static java.lang.String |
FINDER_TYPE
The file type of the Finder on a Macintosh. |
private static java.lang.reflect.Method |
findFolder
The findFolder method of com.apple.mrj.MRJFileUtils |
private static java.lang.String |
FIRST_WINDOWS_PARAMETER
The first parameter that needs to be passed into Runtime.exec() to open the default web browser on Windows. |
private static java.lang.reflect.Method |
getFileCreator
The getFileCreator method of com.apple.mrj.MRJFileUtils |
private static java.lang.reflect.Method |
getFileType
The getFileType method of com.apple.mrj.MRJFileUtils |
private static java.lang.String |
GURL_EVENT
The name for the AppleEvent type corresponding to a GetURL event. |
private static int |
jvm
The Java virtual machine that we are running on. |
private static java.lang.Integer |
kAnyTransactionID
The kAnyTransactionID AppleEvent code |
private static java.lang.Integer |
kAutoGenerateReturnID
The kAutoGenerateReturnID AppleEvent code |
private static java.lang.Integer |
keyDirectObject
The keyDirectObject AppleEvent parameter type |
private static java.lang.Object |
kSystemFolderType
Actually an MRJOSType pointing to the System Folder on a Macintosh |
private static boolean |
loadedWithoutErrors
Caches whether any classes, methods, and fields that are not part of the JDK and need to be dynamically loaded at runtime loaded successfully. |
private static java.lang.reflect.Method |
makeOSType
The makeOSType method of com.apple.MacOS.OSUtils |
private static int |
MRJ_2_0
JVM constant for MRJ 2.0 |
private static int |
MRJ_2_1
JVM constant for MRJ 2.1 or later |
private static int |
MRJ_3_0
JVM constant for Java on Mac OS X 10.0 (MRJ 3.0) |
private static int |
MRJ_3_1
JVM constant for MRJ 3.1 |
private static java.lang.Class |
mrjFileUtilsClass
The com.apple.mrj.MRJFileUtils class |
private static java.lang.Class |
mrjOSTypeClass
The com.apple.mrj.MRJOSType class |
private static java.lang.String |
NETSCAPE_OPEN_PARAMETER_END
|
private static java.lang.String |
NETSCAPE_OPEN_PARAMETER_START
|
private static java.lang.String |
NETSCAPE_REMOTE_PARAMETER
The shell parameters for Netscape or firefox that opens a given URL in an already-open copy of Netscape or firefox on many command-line systems. |
private static java.lang.reflect.Method |
openURL
The openURL method of com.apple.mrj.MRJFileUtils |
private static int |
OTHER
JVM constant for any other platform |
private static java.lang.reflect.Method |
putParameter
The putParameter method of com.apple.MacOS.AppleEvent |
private static java.lang.String |
SECOND_WINDOWS_PARAMETER
The second parameter for Runtime.exec() on Windows. |
private static java.lang.reflect.Method |
sendNoReply
The sendNoReply method of com.apple.MacOS.AppleEvent |
private static java.lang.String |
THIRD_WINDOWS_PARAMETER
The third parameter for Runtime.exec() on Windows. |
private static int |
WINDOWS_9x
JVM constant for any Windows 9x JVM |
private static int |
WINDOWS_NT
JVM constant for any Windows NT JVM |
Constructor Summary | |
---|---|
private |
BrowserLauncher()
This class should be never be instantiated; this just ensures so. |
Method Summary | |
---|---|
private static int |
ICLaunchURL(int instance,
byte[] hint,
byte[] data,
int len,
int[] selectionStart,
int[] selectionEnd)
Methods required for Mac OS X. |
private static int |
ICStart(int[] instance,
int signature)
|
private static int |
ICStop(int[] instance)
|
private static boolean |
loadClasses()
Called by a static initializer to load any classes, fields, and methods required at runtime to locate the user's web browser. |
private static java.lang.Object |
locateBrowser()
Attempts to locate the default web browser on the local system. |
static void |
main(java.lang.String[] args)
Launch the browser on the first argument. |
static void |
openURL(java.lang.String url)
Attempts to open the default web browser to the given URL. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static boolean delayExit
private static int jvm
private static java.lang.Object browser
private static boolean loadedWithoutErrors
Note that if this is false
,
openURL()
will always return an IOException.
private static java.lang.Class mrjFileUtilsClass
private static java.lang.Class mrjOSTypeClass
private static java.lang.Class aeDescClass
private static java.lang.reflect.Constructor aeTargetConstructor
private static java.lang.reflect.Constructor appleEventConstructor
private static java.lang.reflect.Constructor aeDescConstructor
private static java.lang.reflect.Method findFolder
private static java.lang.reflect.Method getFileCreator
private static java.lang.reflect.Method getFileType
private static java.lang.reflect.Method openURL
private static java.lang.reflect.Method makeOSType
private static java.lang.reflect.Method putParameter
private static java.lang.reflect.Method sendNoReply
private static java.lang.Object kSystemFolderType
private static java.lang.Integer keyDirectObject
private static java.lang.Integer kAutoGenerateReturnID
private static java.lang.Integer kAnyTransactionID
private static final int MRJ_2_0
private static final int MRJ_2_1
private static final int MRJ_3_0
private static final int MRJ_3_1
private static final int WINDOWS_NT
private static final int WINDOWS_9x
private static final int OTHER
private static final java.lang.String FINDER_TYPE
private static final java.lang.String FINDER_CREATOR
private static final java.lang.String GURL_EVENT
private static final java.lang.String FIRST_WINDOWS_PARAMETER
private static final java.lang.String SECOND_WINDOWS_PARAMETER
private static final java.lang.String THIRD_WINDOWS_PARAMETER
private static final java.lang.String NETSCAPE_REMOTE_PARAMETER
private static final java.lang.String NETSCAPE_OPEN_PARAMETER_START
private static final java.lang.String NETSCAPE_OPEN_PARAMETER_END
private static java.lang.String errorMessage
Constructor Detail |
---|
private BrowserLauncher()
Method Detail |
---|
public static void main(java.lang.String[] args) throws java.lang.Exception
For example, to open the user's default browser on http://www.eecs.berkeley.edu
java -classpath $PTII ptolemy.actor.gui.BrowserLauncher http://www.eecs.berkeley.edu
args
- An array of command line arguments. The first
argument names a URL to be opened. If there is no first
argument, then open http://ptolemy.eecs.berkeley.edu. Second
and subsequent arguments are ignored.
java.lang.Exception
- If there is a problem launching the browser.public static void openURL(java.lang.String url) throws java.io.IOException
We use the following strategy to find URLs that may be inside
jar files:
If the string does not start with "http": see if it is a
file.
If the file cannot be found, look it up in the classpath.
If the file can be found in the classpath then use the
found file instead of the given URL.
If the file cannot be found in the classpath, then pass the
original given URL to the browser.
If the ptolemy.ptII.browser property is set, then its value
is used as the value of the browser.
To always use Internet Explorer, one might invoke Ptolemy
with:
java -classpath $PTII -Dptolemy.ptII.browser=c:\\Program\ Files\\Internet\ Explorer\\iexplore.exe ptolemy.vergil.VergilApplication
To always use Firefox:
java -classpath $PTII -Dptolemy.ptII.browser=c:\\Program\ Files\\Mozilla\ Firefox\\firefox ptolemy.vergil.VergilApplication
To preserve your browser choice set the ptolemy.ptII.browser
property in $PTII/lib/ptII.properties
. Note that
each time $PTII/bin/configure
is run,
$PTII/lib/ptII.properties.in
is read and
$PTII/lib/ptII.properties
is overwritten, so you
may want to add your changes to
$PTII/lib/ptII.properties.in
.
url
- The URL to open.
It is best if the first argument is an absolute URL
as opposed to a relative URL.
java.io.IOException
- If the web browser could not be located or
does not runprivate static int ICLaunchURL(int instance, byte[] hint, byte[] data, int len, int[] selectionStart, int[] selectionEnd)
private static int ICStart(int[] instance, int signature)
private static int ICStop(int[] instance)
private static boolean loadClasses()
true
if all initialization succeeded
false
if any portion of the initialization failedprivate static java.lang.Object locateBrowser()
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |