esta é uma solução multiplataforma ou apenas Windows? outras respostas neste tópico sugerem o uso da classe Runtime para Linux
isapir
@lgal, funcionou para mim no Windows 7 e no Linux (Ubuntu 10.10). Sempre abre o navegador padrão do sistema (IE no Win7 e Firefox no Ubuntu, no meu caso)
Joaquim Oliveira
1
Isso não funciona para mim. O método IsDesktopSupported sempre retorna falso na minha máquina com Windows. Qual é o problema?
krzysiek.ste
2
Se o usuário atribuiu uma ação personalizada "abrir com" ao arquivo exten como "html", isso NÃO abrirá o navegador, mas o programa ao qual o usuário o vinculou ... Isso não é uma solução de forma alguma!
TheSaint
4
@ krzysiek.ste use a Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)verificação em seu lugar.
Thibstars
35
Aqui está meu código. Ele vai abrir a url fornecida no navegador padrão (solução de plataforma cruzada).
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()});
Se você deseja ter um aplicativo multiplataforma, é necessário adicionar a verificação do sistema operacional (por exemplo):
String os =System.getProperty("os.name").toLowerCase();
Listar todos os navegadores na solução Linux é muito ruim. E se alguém usar outro navegador diferente de qualquer um da lista? (não há cromo nem cromo na lista) Ou tem o Epiphany e o Firefox, mas prefere usar o último? Usar xdg-opené muito melhor neste caso. A solução poderia ser tão simples quanto a do macOS.
m4tx
Outra opção para Windows é rt.exec ("start \" "+ url +" \ ");
Ivan Nikitin
6
Você também pode usar o Runtime para criar uma solução de plataforma cruzada:
Conforme observado na resposta fornecida por Tim Cooper, java.awt.Desktopoferece esse recurso desde a versão 6 do Java (1.6), mas com a seguinte ressalva:
Para plataformas que não oferecem suporte ou não java.awt.Desktop, dê uma olhada no projeto BrowserLauncher2 . É derivado e um tanto atualizado da classe BrowserLauncher originalmente escrita e lançada por Eric Albert. Usei a classe BrowserLauncher original com sucesso em um aplicativo Java multiplataforma que rodava localmente com uma interface de navegador da web no início dos anos 2000.
Observe que o BrowserLauncher2 está licenciado sob a GNU Lesser General Public License . Se essa licença for inaceitável, procure uma cópia do BrowserLauncher original, que tem uma licença bastante liberal:
Este código tem copyright 1999-2001 de Eric Albert ([email protected]) e pode ser redistribuído ou modificado de qualquer forma sem restrições, desde que a parte deste comentário deste parágrafo até o final do comentário não seja removida . O autor solicita que ele seja notificado sobre qualquer aplicativo, miniaplicativo ou outro binário que faça uso desse código, mas isso é mais por curiosidade do que qualquer coisa e não é obrigatório. Este software não inclui garantia. O autor não é responsável por qualquer perda de dados ou funcionalidade ou quaisquer efeitos adversos ou inesperados do uso deste software.
Créditos: Steven Spencer, revista JavaWorld (Java Dica 66) Agradecimentos também a Ron B. Yeh, Eric Shapiro, Ben Engber, Paul Teitlebaum, Andrea Cantatore, Larry Barowski, Trevor Bedzek, Frank Miedrich e Ron Rabakukk
Projetos diferentes do BrowserLauncher2 também podem ter atualizado o BrowserLauncher original para levar em conta as alterações no navegador e nas configurações de segurança do sistema padrão desde 2001.
Para aqueles que procuram usar o BrowserLauncher2 em Macs, nem o BrowserLauncher2 original nem o fork mencionado por @koppor funcionam com o Mac OS X Sierra. Ambos assumem a existência de uma propriedade de sistema "mrj.version" que aparentemente não existe mais. O código lançará uma NullPointerException quando o inicializador for construído. Consulte sourceforge.net/p/browserlaunch2/bugs/14 para obter informações adicionais.
Coren
4
É muito simples, basta escrever o código abaixo:
String s ="http://www.google.com";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
ou se você não quiser carregar o URL, basta escrever o nome do seu navegador em valores de string como,
String s ="chrome";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
ele irá abrir o navegador automaticamente com um URL vazio após a execução de um programa
Espero que você não se importe, mas eu juntei todas as coisas úteis, de cima, e vim com uma classe completa pronta para teste ...
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);}}
no Windows invoque "cmd / k start http://www.example.com " Na verdade, você sempre pode invocar programas "padrão" usando o comando start. Para ex start abc.mp3 irá invocar o reprodutor de mp3 padrão e carregar o arquivo de mp3 solicitado.
Você já postou a versão portátil. Acabei de propor outra solução que pode ser mantida em mente, se não forem apenas os urls que você precisa abrir em programas padrão.
d-live em
1
Eu reformulei a resposta de Brajesh Kumar acima em Clojure da seguinte forma:
(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)))))
Respostas:
java.awt.Desktop
é a aula que você está procurando.fonte
Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)
verificação em seu lugar.Aqui está meu código. Ele vai abrir a url fornecida no navegador padrão (solução de plataforma cruzada).
fonte
Para mim, a solução com
Desktop.isDesktopSupported()
não funciona ( windows 7 e ubuntu ). Tente isso para abrir o navegador a partir do código java:Janelas:
Mac
Linux:
Se você deseja ter um aplicativo multiplataforma, é necessário adicionar a verificação do sistema operacional (por exemplo):
Janelas:
Mac:
Linux:
fonte
xdg-open
é muito melhor neste caso. A solução poderia ser tão simples quanto a do macOS.Você também pode usar o Runtime para criar uma solução de plataforma cruzada:
fonte
Conforme observado na resposta fornecida por Tim Cooper,
java.awt.Desktop
oferece esse recurso desde a versão 6 do Java (1.6), mas com a seguinte ressalva:Para plataformas que não oferecem suporte ou não
java.awt.Desktop
, dê uma olhada no projeto BrowserLauncher2 . É derivado e um tanto atualizado da classe BrowserLauncher originalmente escrita e lançada por Eric Albert. Usei a classe BrowserLauncher original com sucesso em um aplicativo Java multiplataforma que rodava localmente com uma interface de navegador da web no início dos anos 2000.Observe que o BrowserLauncher2 está licenciado sob a GNU Lesser General Public License . Se essa licença for inaceitável, procure uma cópia do BrowserLauncher original, que tem uma licença bastante liberal:
Projetos diferentes do BrowserLauncher2 também podem ter atualizado o BrowserLauncher original para levar em conta as alterações no navegador e nas configurações de segurança do sistema padrão desde 2001.
fonte
É muito simples, basta escrever o código abaixo:
ou se você não quiser carregar o URL, basta escrever o nome do seu navegador em valores de string como,
ele irá abrir o navegador automaticamente com um URL vazio após a execução de um programa
fonte
Espero que você não se importe, mas eu juntei todas as coisas úteis, de cima, e vim com uma classe completa pronta para teste ...
fonte
no Windows invoque "cmd / k start http://www.example.com " Na verdade, você sempre pode invocar programas "padrão" usando o comando start. Para ex start abc.mp3 irá invocar o reprodutor de mp3 padrão e carregar o arquivo de mp3 solicitado.
fonte
Eu reformulei a resposta de Brajesh Kumar acima em Clojure da seguinte forma:
caso seja útil para alguém.
fonte