[Java/windows] webpagina openen in default browser

Pagina: 1
Acties:

  • losealot
  • Registratie: November 2003
  • Laatst online: 09-05-2022
Mijn bedoeling is om een webpagina te openen in de default browser in een nieuw venster vanuit een java applicatie (dus geen applet).
De enige manier die ik gevonden heb is
Java:
1
2
3
String url = "http://www.tweakers.net";
String cmd = "rundll32 url.dll,FileProtocolHandler  " + url;
Process p = Runtime.getRuntime().exec(cmd);

hij opent nu de default browser en laadt de goede pagina MAAR als de browser al open staat doet hij dit in hetzelfde venster ipv een nieuw.
Ik heb al vanalles geprobeerd en ben de wanhoop nabij. Hopelijk weet hier iemand iets op

[ Voor 8% gewijzigd door losealot op 08-06-2005 19:46 ]


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Dat is een gebruikers instellingen volgens mij, "reuse windows for launching shortcuts".

  • losealot
  • Registratie: November 2003
  • Laatst online: 09-05-2022
ik dacht eerst dat er wel en parameter ofzo moest bestaan, maar ik vind bitterweinig over die url.dll.
ik wil dus een _blank effect bekomen

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 06-05 18:23

Robtimus

me Robtimus no like you

Gert schreef op woensdag 08 juni 2005 @ 19:45:
Dat is een gebruikers instellingen volgens mij, "reuse windows for launching shortcuts".
Volgens mij is dat idd een instelling van de browser.
_Losealot_ schreef op woensdag 08 juni 2005 @ 19:47:
ik dacht eerst dat er wel en parameter ofzo moest bestaan, maar ik vind bitterweinig over die url.dll.
ik wil dus een _blank effect bekomen
Zoals al eerder gezegd, volgens mij is dat browser afhankelijk, en kun je dat met url.dll niet oplossen. Zelfs het _blank attribuut is browserafhankelijk, zo zal bv lynx geen nieuw venster openen. Sterker nog, _blank maakt officieel geen deel uit van de HTML3.2 en HTML4.01 specificaties.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Eens site in de default webbrowser starten doe je met java webstart. Dat kan ook als je geen java webstart gebruikt om het programma te starten.
Hoe webstart omgaat met "het openen in hetzelfde of een nieuwe browser" weet ik niet.

Met de standaard Java JDK kon het t/m 1.4.2 iig niet. Je kan het dichts bij komen door eerst een OS-check te doen. In geval van Windows IE te openen, in geval van Mac iets heel ingewikkelds doen en in geval van *nix lukraak op goed geluk browsers proberen te openen totdat je succes hebt. Er bestaat een GNU-gelicenseerd stuk code om dit te doen als je er zelf geen zin in hebt, maar let wel, GNU-code opnemen verplicht je om het hele project onder de GNU-open source-licentie te publiceren. Vaak wil je dat niet.

edit:code:
BasicService bs = (BasicService)ServiceManager.lookup("javax.jnlp.BasicService");
bs.showDocument(url);

[ Voor 111% gewijzigd door Verwijderd op 08-06-2005 21:01 ]


Verwijderd

Probeer deze eens.

Java:
1
2
3
4
public static void main(String[] args) throws IOException {
        String url = "http://www.tweakers.net";  
        Process p = Runtime.getRuntime().exec("\"C:/Program Files/Internet Explorer/iexplore.exe\" " + url);
    }

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

En wat nu als windows niet op c:\ geïnstalleerd is of IE onder windows niet de standaard browser is. De code van The_Tzar ziet er veelbelovend uit maar ik kan BasicService niet vinden in de 1.4.2 javadoc (?).

www.fendt.com | Nikon D7100 | PS5


  • Antediluvian
  • Registratie: Maart 2002
  • Laatst online: 04-05 10:30
FendtVario schreef op donderdag 09 juni 2005 @ 00:32:
En wat nu als windows niet op c:\ geïnstalleerd i
In windows bestaat er een systeem variabele "ProgramFiles" die verwijst naar de "?:\program files" directory waarbij dat vraagteken dus met de correcte drive is.

Je moet maar een het commando "Set" uitvoeren in een command window.

  • losealot
  • Registratie: November 2003
  • Laatst online: 09-05-2022
Verwijderd schreef op woensdag 08 juni 2005 @ 22:08:
Probeer deze eens.

Java:
1
2
3
4
public static void main(String[] args) throws IOException {
        String url = "http://www.tweakers.net";  
        Process p = Runtime.getRuntime().exec("\"C:/Program Files/Internet Explorer/iexplore.exe\" " + url);
    }
het probleem is dat ik als firefox gebruiker het super vervelend vind als IE opent (*kijkt eens boos naar msn messenger*) ipv mijn default browser, waarom is hij anders default

Verwijderd

Verwijderd schreef op woensdag 08 juni 2005 @ 22:08:
Probeer deze eens.

Java:
1
2
3
4
public static void main(String[] args) throws IOException {
        String url = "http://www.tweakers.net";  
        Process p = Runtime.getRuntime().exec("\"C:/Program Files/Internet Explorer/iexplore.exe\" " + url);
    }
Wanneer je Start->Run en dan meteen een url typt, wordt automatisch je default browser gestart en de website geladen. De locatie van de browser heb je helemaal niet nodig.

Dus zoiets zou ook weleens kunnen werken:
Java:
1
Runtime.getRuntime().exec(url);


Niet getest trouwens :+

[ Voor 5% gewijzigd door Verwijderd op 09-06-2005 10:20 ]


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
_Losealot_ schreef op donderdag 09 juni 2005 @ 10:04:
het probleem is dat ik als firefox gebruiker het super vervelend vind als IE opent (*kijkt eens boos naar msn messenger*) ipv mijn default browser, waarom is hij anders default
Opzich is het instellen van het 'hergebruiken' van windows van browsers net zo'n instelling, dus de gebruiker zal het ook vervelend vinden als er opeens een nieuw venster geopend wordt ipv het openen in het huidige venster.

  • JaWi
  • Registratie: Maart 2003
  • Laatst online: 14-01 21:58

JaWi

maak het maar stuk hoor...

Ja ja, Java Webstart is om applicaties via het web op te kunnen starten; de TS vraagt om een manier om vanuit een Java applicatie (niet per se via het web) een nieuwe browser window te openen! De enige juiste (als in default browsers inachtnemende) manier om dit op een Windows machine te doen is via de Windows ProtocolHandler dll (zoals de TS zelf al aangedragen had). Voor een ander OS is er -zover ik weet- geen standaard manier om dit te doen, maar daar wordt ook niet om gevraagd.

offtopic:
En wat is GNU-code? Waarschijnlijk bedoel je GPL?! Je kunt, zonder je hele applicatie te GPL'n, prima GPL'd code in je applicatie gebruiken; zolang je het maar vermeld en door jouw aangebrachte wijzigingen aan diezelfde GPL-code wel onder GPL uitbrengt...

Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.


Verwijderd

JaWi schreef op donderdag 09 juni 2005 @ 10:31:
[...]


Ja ja, Java Webstart is om applicaties via het web op te kunnen starten; de TS vraagt om een manier om vanuit een Java applicatie (niet per se via het web) een nieuwe browser window te openen! De enige juiste (als in default browsers inachtnemende) manier om dit op een Windows machine te doen is via de Windows ProtocolHandler dll (zoals de TS zelf al aangedragen had). Voor een ander OS is er -zover ik weet- geen standaard manier om dit te doen, maar daar wordt ook niet om gevraagd.

offtopic:
En wat is GNU-code? Waarschijnlijk bedoel je GPL?! Je kunt, zonder je hele applicatie te GPL'n, prima GPL'd code in je applicatie gebruiken; zolang je het maar vermeld en door jouw aangebrachte wijzigingen aan diezelfde GPL-code wel onder GPL uitbrengt...
GPL bedoelde ik inderdaad. Als je GPL code mee compileert geld het hele systeem als een aanpassing op de GPL code, ondanks het feit dat de GPL code slechts in 20 van de 300 klassen zit. Athans, zo heb ik het begrepen. Anders moet je het los compileren. Is ook een optie maar maakt het geheel niet altijd gebruiksvriendelijker. Main point is in ieder geval dat je weet dat er haken en ogen aan zitten die waar je eerst op moet letten.

Java webstart is inderdaad een techniek om een (al dan niet gesigneerde) applicatie vanuit een webbrowser op te starten. Je kunt echter ook de java webstart libraries aanspreken terwijl je het programma gewoon als programma opstart en niet vanuit een webbrowser. Dan weet java webstart tóch de default browser te lokaliseren. Of dat verder veel overkill geeft weet ik overigens niet, maar je kunt het iig mee nemen in je overweging, that's all.

Als je het dus niet met java webstart wil doen, kun je overwegen de volgende klasse te gebruiken:
linkje gevonden

  • JaWi
  • Registratie: Maart 2003
  • Laatst online: 14-01 21:58

JaWi

maak het maar stuk hoor...

Verwijderd schreef op donderdag 09 juni 2005 @ 14:11:
[...]
GPL bedoelde ik inderdaad. Als je GPL code mee compileert geld het hele systeem als een aanpassing op de GPL code, ondanks het feit dat de GPL code slechts in 20 van de 300 klassen zit. Athans, zo heb ik het begrepen. Anders moet je het los compileren. Is ook een optie maar maakt het geheel niet altijd gebruiksvriendelijker. Main point is in ieder geval dat je weet dat er haken en ogen aan zitten die waar je eerst op moet letten.
Als je sectie 2 van de GPL v2 licentie goed naleest dan mag je, mits de rest van je applicatie "voldoende" onafhankelijk is van het door GPL-gelicenseerde stuk code, je eigen programmateur onder een andere licentie uitbrengen dan GPL. Echter ben je nog wel verplicht om het stukje GPL-gelicenseerde code expliciet te vernoemen en roepen dat je er geen garantie over geeft...

Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.


Verwijderd

JaWi schreef op donderdag 09 juni 2005 @ 14:25:
[...]


Als je sectie 2 van de GPL v2 licentie goed naleest dan mag je, mits de rest van je applicatie "voldoende" onafhankelijk is van het door GPL-gelicenseerde stuk code, je eigen programmateur onder een andere licentie uitbrengen dan GPL. Echter ben je nog wel verplicht om het stukje GPL-gelicenseerde code expliciet te vernoemen en roepen dat je er geen garantie over geeft...
Ok, is dat duidelijk :) Maar dan denk ik nog dat je op zich wel aan moet kunnen tonen dat de rest van je applicatie voldoende onafhankelijk is. Dat kan moeilijk worden als je niet je applicatieontwerp/structuur wilt vrijgeven. Dus ondanks dat het mag, kan ik me voorstellen dat je er nog best gezeik mee zou kúnnen krijgen. Hoe toon je immers de onafhankelijkheid aan als het in één executable/jar is compiled en je niet je ontwerp vrij wilt geven.
Een jar zou je nog kunnen openen in winrar en laten zien dat de class-bestanden van de GPL-code een apparte package zijn (in feite is daarmee een deel van je design open), maar met een executable van een niet al te groot programma met een volledig geheim design kan dat best lastig worden.

Maargoed, je hebt dus iig meer vrijheid dan ik dacht. Ik had hem persoonlijk ook nooit doorgelezen, enkel laten adviseren door paranoia mensen :) (en op zich niet een onbegrijpelijke paranoide m.i., consequenties kunnen groot zijn )

[ Voor 11% gewijzigd door Verwijderd op 09-06-2005 15:50 ]


  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 21-04 15:56
Zoiets heb ik nogal eens gebruikt.

Voorbeeld class:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
class BrowserControl 

    private String[] defaultCommands() {
        String[] result = null;

        if ( System.getProperty("os.name").startsWith("Windows")){
            result = new String[1];
            result[0] = "rundll32 url.dll,FileProtocolHandler %1";
        } else if (System.getProperty("os.name").startsWith("Mac")){
            result = null;
        } else {
            Vector browsers = new Vector();
            try {
                Process p = Runtime.getRuntime().exec("which galeon");
                if (p.waitFor() == 0) {
                    browsers.add("galeon -n %1");
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            try {
                Process p = Runtime.getRuntime().exec("which mozilla");
                if (p.waitFor() == 0) {
                    browsers.add("mozilla -remote openURL(%1)");
                    browsers.add("mozilla %1");
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            try {
                Process p = Runtime.getRuntime().exec("which netscape");
                if (p.waitFor() == 0) {
                    browsers.add("netscape -remote openURL(%1)");
                    browsers.add("netscape %1");
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

            if (browsers.size() != 0 ) {
                result = new String[browsers.size()];
                result = (String[])browsers.toArray(result);
            }
        }
        return result;
    }

    public void displayURL(String url) {
                String[] exec = defaultCommands();

        // try each of the exec commands until something works.

        boolean found = false;
        for (int i=0; i < exec.length && !found; i++) {
            // put the url into the command
            String command = exec[i] + url;

            // start the browser
            Process p = null;
            try {
                p = Runtime.getRuntime().exec(command);

                // give the brower time to fail
                for (int j=0; j<2; j++) {
                    try {
                        Thread.currentThread().sleep(2000);
                    } catch (InterruptedException ignored) {}
                }

                if (p !=null && p.exitValue() == 0) {
                    // this is a weird case.  The browser exited after
                    // a couple seconds saying that it successfully
                    // displayed the url.  Either the browser is lying
                    // or the user closed it *really* quickly.  Oh well.
                    found = true;
                }
            } catch (IOException ignored) {} // the command was not valid
            catch (IllegalThreadStateException ignored) { found = true; }
        }
    }
}



Natuurlijk kun je allerlei smaken browsers toevoegen.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
[offtopic]
Java:
1
2
3
4
5
6
                // give the brower time to fail
                for (int j=0; j<2; j++) {
                    try {
                        Thread.currentThread().sleep(2000);
                    } catch (InterruptedException ignored) {}
                } 

Nog een reden om niet gewoon sleep(4000) te doen?

  • TukkerTweaker
  • Registratie: November 2001
  • Laatst online: 21-04 15:56
Glimi schreef op donderdag 09 juni 2005 @ 17:40:
[offtopic]
Java:
1
2
3
4
5
6
                // give the brower time to fail
                for (int j=0; j<2; j++) {
                    try {
                        Thread.currentThread().sleep(2000);
                    } catch (InterruptedException ignored) {}
                } 

Nog een reden om niet gewoon sleep(4000) te doen?
Misschien dat ik er vijf jaar geleden een reden voor had. Het is alweer te lang geleden.

  • JaWi
  • Registratie: Maart 2003
  • Laatst online: 14-01 21:58

JaWi

maak het maar stuk hoor...

TukkerTweaker schreef op donderdag 09 juni 2005 @ 17:35:
Zoiets heb ik nogal eens gebruikt.

Voorbeeld class:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
...
                Process p = Runtime.getRuntime().exec("which mozilla");
                if (p.waitFor() == 0) {
                    browsers.add("mozilla -remote openURL(%1)");
                    browsers.add("mozilla %1");
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            try {
                Process p = Runtime.getRuntime().exec("which netscape");
                if (p.waitFor() == 0) {
                    browsers.add("netscape -remote openURL(%1)");
                    browsers.add("netscape %1");
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
...
Hmm, dat lijkt bijna verdacht veel op de code uit de link die The_Tzar gepost heeft...

Statistics are like bikinis. What they reveal is suggestive, but what they hide is vital.


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Weet je ook gelijk waarom dat vreemde loopje er staat, er staat namelijk in die code gewoon commentaar bij.
Java:
1
2
3
4
5
6
7
8
9
10
11
// give the browser a bit of time to fail.
                        // I have found that sometimes sleep doesn't work
                        // the first time, so do it twice.  My tests
                        // seem to show that 1000 milliseconds is enough
                        // time for the browsers I'm using.
                        for (int j=0; j<2; j++){
                             try{
                                    Thread.currentThread().sleep(1000);
                             } catch (InterruptedException inte){
                             }
                        }

Ligt het aan mij of is een van deze twee codes niet origineel? Tenzij het dezelfde personen zijn. :o

Verwijderd

Via google kwam ik dit tegen.

On Windows95/98/NT and Mac, try JConfig:

http://www.tolstoy.com/samizda­t/jconfig.html


Specifically, see the FileRegistry.launchURL() method.

[ Voor 107% gewijzigd door Verwijderd op 10-06-2005 13:24 ]

Pagina: 1