Webbrowser mit URL aufrufen

tomkruse

Erfahrenes Mitglied
Hi!

Ich möchte gerne eine Website aus einer Javaapplikation heraus anzeigen. Dazu rufe ich den Webbrowser auf:

Runtime.getRuntime().exec("start "+url);

... oder so ähnlich. Das funtioniert auch. Ich frage mich nun aber, ob es nicht auch eine elegantere Möglichkeit gibt.

Ausserdem: Das läuft nur unter Windows. Wie könnte man diese Funktionalität unter Linux oder MacOS realisieren?

Cu - Tom.
 
Hi,

Ich habe eine Hilfsklasse, die das bewerkstelligt. Ich rufe dann die URL so auf:

Java:
BrowserControl.displayURL("http://www.google.ch");

Ich habe in meiner Hilfsklasse keine Mac-Version implementiert, weil ich sie nicht benötige. Die Klasse ist allerdings so gestaltet, dass eine Anpassung kein Problem sein sollte.

Java:
import java.io.IOException;

public class BrowserControl
{
    /**
     * 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 = isWindowsPlatform();
        String cmd = null;
        try
        {
            if (windows)
            {
                // cmd = 'rundll32 url.dll,FileProtocolHandler http://...'
                cmd = WIN_PATH + " " + WIN_FLAG + " " + url; //$NON-NLS-1$ //$NON-NLS-2$
                @SuppressWarnings("unused")
				final Process p = 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 + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
                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; //$NON-NLS-1$
                        p = Runtime.getRuntime().exec(cmd);
                    }
                }
                catch(InterruptedException x)
                {
                	/*
                    System.err.println("Error bringing up browser, cmd='" + //$NON-NLS-1$
                                       cmd + "'"); //$NON-NLS-1$
                    System.err.println("Caught: " + x); //$NON-NLS-1$
                    */
                }
            }
        }
        catch(IOException x)
        {
            // couldn't exec browser
            System.err.println("Could not invoke browser, command=" + cmd); //$NON-NLS-1$
            System.err.println("Caught: " + x); //$NON-NLS-1$
        }
    }
    /**
     * 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"); //$NON-NLS-1$
        if ( os != null && os.startsWith(WIN_ID))
            return true;
        else
            return false;
    }
    
    // Used to identify the windows platform.
    private static final String WIN_ID = "Windows"; //$NON-NLS-1$
    // The default system browser under windows.
    private static final String WIN_PATH = "rundll32"; //$NON-NLS-1$
    // The flag to display a url.
    private static final String WIN_FLAG = "url.dll,FileProtocolHandler"; //$NON-NLS-1$
    // The default browser under unix.
    private static final String UNIX_PATH = "netscape"; //$NON-NLS-1$
    // The flag to display a url.
    private static final String UNIX_FLAG = "-remote openURL"; //$NON-NLS-1$
}

Gruss
mas
 
Hallo,

so geht es einfacher:

Java:
if(Desktop.isDesktopSupported())
{
     Desktop.getDesktop().browse("Hier kommt die Uri rein"); 
}

Damit wird, wenn vorhanden der Standardbrowser des Betriebssystems mit der übergebenen Adresse gestartet.

MfG
hansmueller
 
Zuletzt bearbeitet:
@ mas666 & hansmueller

Dann hoffen wir mal, dass nach knapp sechseinhalb Jahren Eure Antworten beim Fragesteller noch ein Gehör finden.

mfg Maik
 
höhö... besser spät als nie.

Ich persönlich suche immer zuerst nach Themen und wenn die Frage schon jemand gestellt hat ist es doch schön, wenn sie beantwortet wurde.

Markiere das Thema doch als erledigt.
 
:eek:... habe darauf gar nicht geachtet.
War unter den heutigen Beiträgen und da dachte ich, ich gebe meinen Senf mal dazu.

Außerdem finde ich es immer sehr frustrierend, wenn ich in einem Forum ein Thema finde, das genau mein Problem beschreibt, aber bei dem es niemand für nötig hielt, eine Antwort darauf zu geben.

MfG
hansmueller
 
Zurück