¿Es esta una solución multiplataforma o solo Windows? otras respuestas en este hilo sugieren usar la clase Runtime para Linux
isapir
@lgal, funcionó para mí tanto en Windows 7 como en Linux (Ubuntu 10.10). Siempre abre el navegador del sistema predeterminado (IE en Win7 y Firefox en Ubuntu, en mi caso)
Joaquim Oliveira
1
Esto no funciona para mí. El método IsDesktopSupported siempre devuelve falso en mi máquina con Windows. ¿Qué pasa?
krzysiek.ste
2
Si el usuario ha asignado una acción personalizada "abrir con" a la extensión del archivo como "html", esto NO abrirá el navegador, sino el programa con el que el usuario lo ha vinculado ... ¡Esto no es una solución en absoluto!
Santo-
4
@ krzysiek.ste usa el Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)cheque en su lugar.
Thibstars
35
Aquí está mi código. Se abrirá la URL dada en el navegador predeterminado (solución multiplataforma).
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()});
Si desea tener una aplicación multiplataforma, debe agregar la verificación del sistema operativo (por ejemplo):
String os =System.getProperty("os.name").toLowerCase();
Listar todos los navegadores en la solución Linux es muy malo. ¿Qué pasa si uno usa un navegador diferente a cualquiera de la lista? (no hay cromo ni cromo en la lista) ¿O tiene Epiphany y Firefox, pero prefiere usar este último? Usar xdg-openes mucho mejor en este caso. Por lo tanto, la solución podría ser tan simple como la de macOS.
m4tx
Otra opción para Windows es rt.exec ("start \" "+ url +" \ ");
Ivan Nikitin
6
También puede usar Runtime para crear una solución multiplataforma:
Como se indica en la respuesta proporcionada por Tim Cooper, java.awt.Desktopha proporcionado esta capacidad desde la versión 6 de Java (1.6), pero con la siguiente advertencia:
Para las plataformas que no son compatibles o no proporcionan java.awt.Desktop, consulte el proyecto BrowserLauncher2 . Se deriva y algo actualizado de la clase BrowserLauncher originalmente escrita y publicada por Eric Albert. Utilicé la clase BrowserLauncher original con éxito en una aplicación Java multiplataforma que se ejecutaba localmente con una interfaz de navegador web a principios de la década de 2000.
Tenga en cuenta que BrowserLauncher2 tiene la licencia GNU Lesser General Public License . Si esa licencia es inaceptable, busque una copia del BrowserLauncher original que tiene una licencia muy liberal:
Este código tiene Copyright 1999-2001 de Eric Albert ([email protected]) y puede redistribuirse o modificarse de cualquier forma sin restricciones, siempre que no se elimine la parte de este comentario desde este párrafo hasta el final del comentario. . El autor solicita que se le notifique de cualquier aplicación, subprograma u otro binario que haga uso de este código, pero eso es más por curiosidad que por cualquier otra cosa y no es obligatorio. Este software no incluye garantía. El autor no es responsable de ninguna pérdida de datos o funcionalidad o de cualquier efecto adverso o inesperado del uso de este software.
Créditos: Steven Spencer, revista JavaWorld (Consejo 66 de Java) Gracias también a Ron B. Yeh, Eric Shapiro, Ben Engber, Paul Teitlebaum, Andrea Cantatore, Larry Barowski, Trevor Bedzek, Frank Miedrich y Ron Rabakukk
Es posible que otros proyectos distintos a BrowserLauncher2 también hayan actualizado el BrowserLauncher original para tener en cuenta los cambios en la configuración de seguridad predeterminada del navegador y del sistema desde 2001.
Para aquellos que buscan usar BrowserLauncher2 en Mac, ni el BrowserLauncher2 original ni el fork mencionado por @koppor funcionan con Mac OS X Sierra. Ambos asumen la existencia de una propiedad del sistema "mrj.version" que aparentemente ya no existe. El código lanzará una NullPointerException cuando se construya el lanzador. Consulte sourceforge.net/p/browserlaunch2/bugs/14 para obtener información adicional.
Coren
4
Es muy simple, simplemente escriba el código a continuación:
String s ="http://www.google.com";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
o si no desea cargar la URL, simplemente escriba el nombre de su navegador en valores de cadena como,
String s ="chrome";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
abrirá el navegador automáticamente con la URL vacía después de ejecutar un programa
en Windows, invoque "cmd / k start http://www.example.com " De hecho, siempre puede invocar programas "predeterminados" utilizando el comando de inicio. Por ejemplo, start abc.mp3 invocará el reproductor mp3 predeterminado y cargará el archivo mp3 solicitado.
Ya publicaste la versión portátil. Acabo de proponer otra solución que podría tenerse en cuenta si no son solo las URL que necesita abrir en los programas predeterminados.
d-live
1
Espero que no le importe, pero improvisé todas las cosas útiles, desde arriba, y se me ocurrió una clase completa lista para probar ...
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);}}
Me refundición Brajesh Kumar respuesta 's arriba en Clojure de la siguiente manera:
(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)))))
Respuestas:
java.awt.Desktop
es la clase que estás buscando.fuente
Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)
cheque en su lugar.Aquí está mi código. Se abrirá la URL dada en el navegador predeterminado (solución multiplataforma).
fuente
Para mí, la solución
Desktop.isDesktopSupported()
no funciona ( Windows 7 y Ubuntu ). Intente esto para abrir el navegador desde el código java:Ventanas:
Mac
Linux:
Si desea tener una aplicación multiplataforma, debe agregar la verificación del sistema operativo (por ejemplo):
Ventanas:
Mac:
Linux:
fuente
xdg-open
es mucho mejor en este caso. Por lo tanto, la solución podría ser tan simple como la de macOS.También puede usar Runtime para crear una solución multiplataforma:
fuente
Como se indica en la respuesta proporcionada por Tim Cooper,
java.awt.Desktop
ha proporcionado esta capacidad desde la versión 6 de Java (1.6), pero con la siguiente advertencia:Para las plataformas que no son compatibles o no proporcionan
java.awt.Desktop
, consulte el proyecto BrowserLauncher2 . Se deriva y algo actualizado de la clase BrowserLauncher originalmente escrita y publicada por Eric Albert. Utilicé la clase BrowserLauncher original con éxito en una aplicación Java multiplataforma que se ejecutaba localmente con una interfaz de navegador web a principios de la década de 2000.Tenga en cuenta que BrowserLauncher2 tiene la licencia GNU Lesser General Public License . Si esa licencia es inaceptable, busque una copia del BrowserLauncher original que tiene una licencia muy liberal:
Es posible que otros proyectos distintos a BrowserLauncher2 también hayan actualizado el BrowserLauncher original para tener en cuenta los cambios en la configuración de seguridad predeterminada del navegador y del sistema desde 2001.
fuente
Es muy simple, simplemente escriba el código a continuación:
o si no desea cargar la URL, simplemente escriba el nombre de su navegador en valores de cadena como,
abrirá el navegador automáticamente con la URL vacía después de ejecutar un programa
fuente
en Windows, invoque "cmd / k start http://www.example.com " De hecho, siempre puede invocar programas "predeterminados" utilizando el comando de inicio. Por ejemplo, start abc.mp3 invocará el reproductor mp3 predeterminado y cargará el archivo mp3 solicitado.
fuente
Espero que no le importe, pero improvisé todas las cosas útiles, desde arriba, y se me ocurrió una clase completa lista para probar ...
fuente
Me refundición Brajesh Kumar respuesta 's arriba en Clojure de la siguiente manera:
en caso de que sea útil para alguien.
fuente