Ist dies eine plattformübergreifende Lösung oder nur Windows? Andere Antworten in diesem Thread schlagen vor, die Runtime-Klasse für Linux zu verwenden
Isapir
@lgal, es hat bei mir sowohl unter Windows 7 als auch unter Linux (Ubuntu 10.10) funktioniert. Es öffnet immer den Standard-Systembrowser (IE unter Win7 und Firefox unter Ubuntu, in meinem Fall)
Joaquim Oliveira
1
Das funktioniert bei mir nicht. Die IsDesktopSupported-Methode gibt auf meinem Windows-Computer immer false zurück. Was ist los?
krzysiek.ste
2
Wenn der Benutzer der Datei Exten wie "html" eine benutzerdefinierte Aktion "Öffnen mit" zugewiesen hat, wird der Browser NICHT geöffnet, sondern das Programm, mit dem der Benutzer ihn verknüpft hat. Dies ist überhaupt keine Lösung!
Heilige
4
@ krzysiek.ste benutze Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)stattdessen den Scheck.
Thibstars
35
Hier ist mein Code. Die angegebene URL wird im Standardbrowser (plattformübergreifende Lösung) geöffnet.
"'xdg-open' wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt."
Xehpuk
10
Das ist ein Unix-Befehl. Was machst du damit in Windows
Olu Smith
7
Aktivieren Sie neben 'Desktop.isDesktopSupported ()' auch 'Desktop.getDesktop (). IsSupported (Action.BROWSE)'.
Kanchu
35
Für mich Desktop.isDesktopSupported()funktioniert die Lösung mit nicht ( Windows 7 und Ubuntu ). Bitte versuchen Sie dies, um den Browser über Java-Code zu öffnen:
Runtime rt =Runtime.getRuntime();String url ="http://stackoverflow.com";String[] browsers ={"epiphany","firefox","mozilla","konqueror","netscape","opera","links","lynx"};StringBuffer cmd =newStringBuffer();for(int i =0; i < browsers.length; i++)if(i ==0)
cmd.append(String.format("%s \"%s\"", browsers[i], url));else
cmd.append(String.format(" || %s \"%s\"", browsers[i], url));// If the first didn't work, try the next browser and so on
rt.exec(newString[]{"sh","-c", cmd.toString()});
Wenn Sie eine Multiplattform-Anwendung wünschen, müssen Sie die Betriebssystemprüfung hinzufügen (zum Beispiel):
String os =System.getProperty("os.name").toLowerCase();
Das Auflisten aller Browser in der Linux-Lösung ist sehr schlecht. Was ist, wenn man einen anderen Browser als einen aus der Liste verwendet? (Es gibt weder Chrom noch Chrom auf der Liste.) Oder hat sowohl Epiphany als auch Firefox, bevorzugt aber Letzteres? Die Verwendung xdg-openist in diesem Fall viel besser. Die Lösung könnte daher so einfach sein wie die von macOS.
m4tx
Eine andere Option für Windows ist rt.exec ("start" + url + ");
Ivan Nikitin
6
Sie können die Laufzeit auch verwenden , um eine plattformübergreifende Lösung zu erstellen:
Informationen zu Plattformen, die nicht unterstützt oder bereitgestellt werden, finden Siejava.awt.Desktop im BrowserLauncher2- Projekt. Es ist vom BrowserLauncher abgeleitet und etwas aktualisiert Klasse, die ursprünglich von Eric Albert geschrieben und veröffentlicht wurde. Ich habe die ursprüngliche BrowserLauncher-Klasse erfolgreich in einer plattformübergreifenden Java-Anwendung verwendet, die Anfang der 2000er Jahre lokal mit einer Webbrowser-Oberfläche ausgeführt wurde.
Beachten Sie, dass BrowserLauncher2 unter der GNU Lesser General Public License lizenziert ist . Wenn diese Lizenz nicht akzeptabel ist, suchen Sie nach einer Kopie des ursprünglichen BrowserLauncher mit einer sehr liberalen Lizenz:
Dieser Code unterliegt dem Copyright 1999-2001 von Eric Albert ([email protected]) und kann ohne Einschränkung in irgendeiner Form weitergegeben oder geändert werden, solange der Teil dieses Kommentars von diesem Absatz bis zum Ende des Kommentars nicht entfernt wird . Der Autor fordert, dass er über jede Anwendung, jedes Applet oder jede andere Binärdatei informiert wird, die diesen Code verwendet. Dies ist jedoch mehr aus Neugier als alles andere und nicht erforderlich. Diese Software beinhaltet keine Garantie. Der Autor ist nicht verantwortlich für Daten- oder Funktionsverlust oder nachteilige oder unerwartete Auswirkungen der Verwendung dieser Software.
Credits: Steven Spencer, JavaWorld-Magazin (Java-Tipp 66) Dank auch an Ron B. Yeh, Eric Shapiro, Ben Engber, Paul Teitlebaum, Andrea Cantatore, Larry Barowski, Trevor Bedzek, Frank Miedrich und Ron Rabakukk
Andere Projekte als BrowserLauncher2 haben möglicherweise auch den ursprünglichen BrowserLauncher aktualisiert, um Änderungen in den Browser- und Standardsystem-Sicherheitseinstellungen seit 2001 zu berücksichtigen.
Für diejenigen, die BrowserLauncher2 auf Macs verwenden möchten, funktionieren weder der ursprüngliche BrowserLauncher2 noch die von @koppor erwähnte Gabel mit Mac OS X Sierra. Beide setzen die Existenz einer Systemeigenschaft "mrj.version" voraus, die anscheinend nicht mehr existiert. Der Code löst eine NullPointerException aus, wenn der Launcher erstellt wird. Weitere Informationen finden Sie unter sourceforge.net/p/browserlaunch2/bugs/14 .
Coren
4
Es ist sehr einfach, schreiben Sie einfach den folgenden Code:
String s ="http://www.google.com";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
oder wenn Sie keine URL laden möchten, schreiben Sie einfach Ihren Browsernamen in Zeichenfolgenwerte wie:
String s ="chrome";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
Nach dem Ausführen eines Programms wird der Browser automatisch mit leerer URL geöffnet
Unter Windows rufen Sie "cmd / k start http://www.example.com " auf. Tatsächlich können Sie mit dem Befehl "start" jederzeit "Standard" -Programme aufrufen. Zum Beispiel startet abc.mp3 den Standard-MP3-Player und lädt die angeforderte MP3-Datei.
Sie haben die tragbare Version bereits veröffentlicht. Ich habe gerade eine andere Lösung vorgeschlagen , die berücksichtigt werden könnte, wenn es sich nicht nur um die URLs handelt, die Sie in Standardprogrammen öffnen müssen.
D-Live
1
Ich hoffe, es macht Ihnen nichts aus, aber ich habe all die hilfreichen Dinge von oben zusammengeschustert und mir eine komplette Klasse ausgedacht, die zum Testen bereit ist ...
import java.awt.Desktop;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;publicclassMultiBrowPop{publicstaticvoid main(String[] args){
OUT("\nWelcome to Multi Brow Pop.\nThis aims to popup a browsers in multiple operating systems.\nGood luck!\n");String url ="http://www.birdfolk.co.uk/cricmob";
OUT("We're going to this page: "+ url);String myOS =System.getProperty("os.name").toLowerCase();
OUT("(Your operating system is: "+ myOS +")\n");try{if(Desktop.isDesktopSupported()){// Probably Windows
OUT(" -- Going with Desktop.browse ...");Desktop desktop =Desktop.getDesktop();
desktop.browse(new URI(url));}else{// Definitely Non-windowsRuntime runtime =Runtime.getRuntime();if(myOS.contains("mac")){// Apples
OUT(" -- Going on Apple with 'open'...");
runtime.exec("open "+ url);}elseif(myOS.contains("nix")|| myOS.contains("nux")){// Linux flavours
OUT(" -- Going on Linux with 'xdg-open'...");
runtime.exec("xdg-open "+ url);}else
OUT("I was unable/unwilling to launch a browser in your OS :( #SadFace");}
OUT("\nThings have finished.\nI hope you're OK.");}catch(IOException|URISyntaxException eek){
OUT("**Stuff wrongly: "+ eek.getMessage());}}privatestaticvoid OUT(String str){System.out.println(str);}}
(defn open-browser
"Open a new browser (window or tab) viewing the document at this `uri`."[uri](if(java.awt.Desktop/isDesktopSupported)(let[desktop (java.awt.Desktop/getDesktop)](.browse desktop (java.net.URI. uri)))(let[rt (java.lang.Runtime/getRuntime)](.exec rt (str "xdg-open " uri)))))
für den Fall, dass es für irgendjemanden nützlich ist.
Antworten:
java.awt.Desktop
ist die Klasse, die Sie suchen.quelle
Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)
stattdessen den Scheck.Hier ist mein Code. Die angegebene URL wird im Standardbrowser (plattformübergreifende Lösung) geöffnet.
quelle
Für mich
Desktop.isDesktopSupported()
funktioniert die Lösung mit nicht ( Windows 7 und Ubuntu ). Bitte versuchen Sie dies, um den Browser über Java-Code zu öffnen:Windows:
Mac
Linux:
Wenn Sie eine Multiplattform-Anwendung wünschen, müssen Sie die Betriebssystemprüfung hinzufügen (zum Beispiel):
Windows:
Mac:
Linux:
quelle
xdg-open
ist in diesem Fall viel besser. Die Lösung könnte daher so einfach sein wie die von macOS.Sie können die Laufzeit auch verwenden , um eine plattformübergreifende Lösung zu erstellen:
quelle
Wie in der Antwort von Tim Cooper erwähnt,
java.awt.Desktop
bietet diese Funktion seit Java Version 6 (1.6), jedoch mit der folgenden Einschränkung:Informationen zu Plattformen, die nicht unterstützt oder bereitgestellt werden, finden Sie
java.awt.Desktop
im BrowserLauncher2- Projekt. Es ist vom BrowserLauncher abgeleitet und etwas aktualisiert Klasse, die ursprünglich von Eric Albert geschrieben und veröffentlicht wurde. Ich habe die ursprüngliche BrowserLauncher-Klasse erfolgreich in einer plattformübergreifenden Java-Anwendung verwendet, die Anfang der 2000er Jahre lokal mit einer Webbrowser-Oberfläche ausgeführt wurde.Beachten Sie, dass BrowserLauncher2 unter der GNU Lesser General Public License lizenziert ist . Wenn diese Lizenz nicht akzeptabel ist, suchen Sie nach einer Kopie des ursprünglichen BrowserLauncher mit einer sehr liberalen Lizenz:
Andere Projekte als BrowserLauncher2 haben möglicherweise auch den ursprünglichen BrowserLauncher aktualisiert, um Änderungen in den Browser- und Standardsystem-Sicherheitseinstellungen seit 2001 zu berücksichtigen.
quelle
Es ist sehr einfach, schreiben Sie einfach den folgenden Code:
oder wenn Sie keine URL laden möchten, schreiben Sie einfach Ihren Browsernamen in Zeichenfolgenwerte wie:
Nach dem Ausführen eines Programms wird der Browser automatisch mit leerer URL geöffnet
quelle
Unter Windows rufen Sie "cmd / k start http://www.example.com " auf. Tatsächlich können Sie mit dem Befehl "start" jederzeit "Standard" -Programme aufrufen. Zum Beispiel startet abc.mp3 den Standard-MP3-Player und lädt die angeforderte MP3-Datei.
quelle
Ich hoffe, es macht Ihnen nichts aus, aber ich habe all die hilfreichen Dinge von oben zusammengeschustert und mir eine komplette Klasse ausgedacht, die zum Testen bereit ist ...
quelle
Ich habe die Antwort von Brajesh Kumar oben in Clojure wie folgt umformuliert :
für den Fall, dass es für irgendjemanden nützlich ist.
quelle