P
Peter.weik
Hello,
I have a java programm which shall open a Browser with a certain URL
AND!!!!! if this browser window is closed from a use after a while, the
java programm should be informed about this.
The following code is what I did. I am able to open a browser OS
independently.
--------------------------------------------------------------------------------------------------------------------
package com.indatex.browsercommunication;
import java.io.*;
/* Note - you must include the url type -- either "http://" or
* "file://".
*/
public class BrowserControlOSIndependent
{
// Used to identify the windows platform.
private String WIN_ID = "Windows";
// The default system browser under windows.
private String WIN_PATH = "rundll32";
// The flag to display a url.
private String WIN_FLAG = "url.dll,FileProtocolHandler";
// The default browser under unix.
private String UNIX_PATH = "netscape";
// The flag to display a url.
private String UNIX_FLAG = "-remote openURL";
private Process p = null;
public boolean hasBrowserFinished()throws Exception{
if(p.exitValue()>0){
return true;
}
p.destroy();
return false;
}
public void displayURL(String url)
{
boolean windows = isWindowsPlatform();
String cmd = null;
try
{
if (windows)
{
// cmd = 'rundll32 url.dll,FileProtocolHandler
http://...'
cmd = WIN_PATH + " " + WIN_FLAG + " " + url;
p = Runtime.getRuntime().exec(cmd);
try {
p.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
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 boolean isWindowsPlatform()
{
String os = System.getProperty("os.name");
if ( os != null && os.startsWith(WIN_ID))
return true;
else
return false;
}
}
-----------------------------------------------------------------------------
Thats everything fine. BUT!! if I close the Browser Window the java
programm shall be notified.
How does this work???
I thougt the easiest way is to examine the exitValue() of the process
in a lets say endles loop.
That doesnt work with process.exitValue() I always get 0, if the
browser is closed or not.
Could you help me?
Thank,
Peter
I have a java programm which shall open a Browser with a certain URL
AND!!!!! if this browser window is closed from a use after a while, the
java programm should be informed about this.
The following code is what I did. I am able to open a browser OS
independently.
--------------------------------------------------------------------------------------------------------------------
package com.indatex.browsercommunication;
import java.io.*;
/* Note - you must include the url type -- either "http://" or
* "file://".
*/
public class BrowserControlOSIndependent
{
// Used to identify the windows platform.
private String WIN_ID = "Windows";
// The default system browser under windows.
private String WIN_PATH = "rundll32";
// The flag to display a url.
private String WIN_FLAG = "url.dll,FileProtocolHandler";
// The default browser under unix.
private String UNIX_PATH = "netscape";
// The flag to display a url.
private String UNIX_FLAG = "-remote openURL";
private Process p = null;
public boolean hasBrowserFinished()throws Exception{
if(p.exitValue()>0){
return true;
}
p.destroy();
return false;
}
public void displayURL(String url)
{
boolean windows = isWindowsPlatform();
String cmd = null;
try
{
if (windows)
{
// cmd = 'rundll32 url.dll,FileProtocolHandler
http://...'
cmd = WIN_PATH + " " + WIN_FLAG + " " + url;
p = Runtime.getRuntime().exec(cmd);
try {
p.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
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 boolean isWindowsPlatform()
{
String os = System.getProperty("os.name");
if ( os != null && os.startsWith(WIN_ID))
return true;
else
return false;
}
}
-----------------------------------------------------------------------------
Thats everything fine. BUT!! if I close the Browser Window the java
programm shall be notified.
How does this work???
I thougt the easiest way is to examine the exitValue() of the process
in a lets say endles loop.
That doesnt work with process.exitValue() I always get 0, if the
browser is closed or not.
Could you help me?
Thank,
Peter