est-ce une solution multiplateforme ou Windows uniquement? d'autres réponses dans ce fil suggèrent d'utiliser la classe Runtime pour Linux
isapir
@lgal, cela a fonctionné pour moi à la fois sur Windows 7 et Linux (Ubuntu 10.10). Il ouvre toujours le navigateur système par défaut (IE sur Win7 et Firefox sur Ubuntu, dans mon cas)
Joaquim Oliveira
1
Cela ne fonctionne pas pour moi. La méthode IsDesktopSupported renvoie toujours false sur ma machine Windows. Quel est le problème?
krzysiek.ste
2
Si l'utilisateur a assigné une action personnalisée "ouvrir avec" au fichier exten comme "html" alors cela n'ouvrira PAS le navigateur, mais le programme avec lequel l'utilisateur l'a lié .... Ce n'est pas du tout une solution!
thesaint
4
@ krzysiek.ste utilise la Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)vérification à la place.
Thibstars
35
Voici mon code. Il ouvrira l'URL donnée dans le navigateur par défaut (solution multiplateforme).
"'xdg-open' n'est pas reconnu comme une commande interne ou externe, un programme utilisable ou un fichier de commandes."
xehpuk
10
C'est une commande unix. que faites-vous en cours d'exécution dans Windows
Olu Smith
7
Avec «Desktop.isDesktopSupported ()», cochez également «Desktop.getDesktop (). IsSupported (Action.BROWSE)».
Kanchu
35
Pour moi, la solution avec Desktop.isDesktopSupported()ne fonctionne pas ( Windows 7 et Ubuntu ). Veuillez essayer ceci pour ouvrir le navigateur à partir du code java:
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 vous souhaitez avoir une application multiplateforme, vous devez ajouter une vérification du système d'exploitation (par exemple):
String os =System.getProperty("os.name").toLowerCase();
Lister tous les navigateurs de la solution Linux est très mauvais. Et si l'on utilise un autre navigateur que n'importe lequel de la liste? (il n'y a pas de chrome ni de chrome sur la liste) Ou a à la fois Epiphany et Firefox, mais préfère utiliser ce dernier? L'utilisation xdg-openest bien meilleure dans ce cas. La solution pourrait donc être aussi simple que celle de macOS.
m4tx
Une autre option pour Windows est rt.exec ("start \" "+ url +" \ ");
Ivan Nikitin
6
Vous pouvez également utiliser le Runtime pour créer une solution multiplateforme:
Comme indiqué dans la réponse fournie par Tim Cooper, java.awt.Desktopa fourni cette capacité depuis la version 6 de Java (1.6), mais avec la mise en garde suivante:
Pour les plates-formes qui ne prennent pas en charge ou ne fournissent pas java.awt.Desktop, regardez dans le projet BrowserLauncher2 . Il est dérivé et quelque peu mis à jour de la classe BrowserLauncher initialement écrite et publiée par Eric Albert. J'ai utilisé avec succès la classe originale BrowserLauncher dans une application Java multi-plateforme qui fonctionnait localement avec une interface de navigateur Web au début des années 2000.
Notez que BrowserLauncher2 est sous licence GNU Lesser General Public License . Si cette licence est inacceptable, recherchez une copie du BrowserLauncher original qui a une licence très libérale:
Ce code est Copyright 1999-2001 par Eric Albert ([email protected]) et peut être redistribué ou modifié sous n'importe quelle forme sans restriction tant que la partie de ce commentaire de ce paragraphe jusqu'à la fin du commentaire n'est pas supprimée . L'auteur demande qu'il soit averti de toute application, applet ou autre binaire utilisant ce code, mais c'est plus par curiosité qu'autre chose et n'est pas obligatoire. Ce logiciel n'inclut aucune garantie. L'auteur n'est pas responsable de toute perte de données ou de fonctionnalité ou de tout effet indésirable ou inattendu de l'utilisation de ce logiciel.
Crédits: Steven Spencer, magazine JavaWorld (Java Tip 66) Merci également à Ron B.Yeh, Eric Shapiro, Ben Engber, Paul Teitlebaum, Andrea Cantatore, Larry Barowski, Trevor Bedzek, Frank Miedrich et Ron Rabakukk
Les projets autres que BrowserLauncher2 peuvent également avoir mis à jour le BrowserLauncher d'origine pour tenir compte des modifications apportées aux paramètres de sécurité du navigateur et du système par défaut depuis 2001.
Pour ceux qui cherchent à utiliser BrowserLauncher2 sur Mac, ni le BrowserLauncher2 d'origine ni le fork mentionné par @koppor ne fonctionnent avec Mac OS X Sierra. Les deux supposent l'existence d'une propriété système "mrj.version" qui n'existe apparemment plus. Le code lèvera une NullPointerException lorsque le lanceur est construit. Voir sourceforge.net/p/browserlaunch2/bugs/14 pour plus d'informations.
Coren
4
C'est très simple, il suffit d'écrire le code ci-dessous:
String s ="http://www.google.com";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
ou si vous ne voulez pas charger l'URL, écrivez simplement le nom de votre navigateur dans des valeurs de chaîne comme,
String s ="chrome";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
il ouvrira automatiquement le navigateur avec une URL vide après l'exécution d'un programme
J'espère que cela ne vous dérange pas, mais j'ai bricolé toutes les choses utiles, d'en haut, et j'ai proposé une classe complète prête à être testée ...
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);}}
sous windows, invoquez "cmd / k start http://www.example.com " En fait, vous pouvez toujours invoquer des programmes "par défaut" en utilisant la commande start. Par exemple, abc.mp3 invoquera le lecteur mp3 par défaut et chargera le fichier mp3 demandé.
Vous avez déjà publié la version portable. Je viens de proposer une autre solution qui pourrait être gardée à l'esprit si ce n'est pas seulement les URL que vous devez ouvrir dans les programmes par défaut.
d-live
1
Je reformule la réponse de Brajesh Kumar ci-dessus en Clojure comme suit:
(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)))))
Réponses:
java.awt.Desktop
est la classe que vous recherchez.la source
Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)
vérification à la place.Voici mon code. Il ouvrira l'URL donnée dans le navigateur par défaut (solution multiplateforme).
la source
Pour moi, la solution avec
Desktop.isDesktopSupported()
ne fonctionne pas ( Windows 7 et Ubuntu ). Veuillez essayer ceci pour ouvrir le navigateur à partir du code java:Les fenêtres:
Mac
Linux:
Si vous souhaitez avoir une application multiplateforme, vous devez ajouter une vérification du système d'exploitation (par exemple):
Les fenêtres:
Mac:
Linux:
la source
xdg-open
est bien meilleure dans ce cas. La solution pourrait donc être aussi simple que celle de macOS.Vous pouvez également utiliser le Runtime pour créer une solution multiplateforme:
la source
Comme indiqué dans la réponse fournie par Tim Cooper,
java.awt.Desktop
a fourni cette capacité depuis la version 6 de Java (1.6), mais avec la mise en garde suivante:Pour les plates-formes qui ne prennent pas en charge ou ne fournissent pas
java.awt.Desktop
, regardez dans le projet BrowserLauncher2 . Il est dérivé et quelque peu mis à jour de la classe BrowserLauncher initialement écrite et publiée par Eric Albert. J'ai utilisé avec succès la classe originale BrowserLauncher dans une application Java multi-plateforme qui fonctionnait localement avec une interface de navigateur Web au début des années 2000.Notez que BrowserLauncher2 est sous licence GNU Lesser General Public License . Si cette licence est inacceptable, recherchez une copie du BrowserLauncher original qui a une licence très libérale:
Les projets autres que BrowserLauncher2 peuvent également avoir mis à jour le BrowserLauncher d'origine pour tenir compte des modifications apportées aux paramètres de sécurité du navigateur et du système par défaut depuis 2001.
la source
C'est très simple, il suffit d'écrire le code ci-dessous:
ou si vous ne voulez pas charger l'URL, écrivez simplement le nom de votre navigateur dans des valeurs de chaîne comme,
il ouvrira automatiquement le navigateur avec une URL vide après l'exécution d'un programme
la source
J'espère que cela ne vous dérange pas, mais j'ai bricolé toutes les choses utiles, d'en haut, et j'ai proposé une classe complète prête à être testée ...
la source
sous windows, invoquez "cmd / k start http://www.example.com " En fait, vous pouvez toujours invoquer des programmes "par défaut" en utilisant la commande start. Par exemple, abc.mp3 invoquera le lecteur mp3 par défaut et chargera le fichier mp3 demandé.
la source
Je reformule la réponse de Brajesh Kumar ci-dessus en Clojure comme suit:
au cas où cela serait utile à quiconque.
la source