Oi pessoal
Queria que, quando alguém clicasse em um label ou button, o browser padrão fosse aberto com um link X. Como posso fazer isso?
obrigado
Oi pessoal
Queria que, quando alguém clicasse em um label ou button, o browser padrão fosse aberto com um link X. Como posso fazer isso?
obrigado
Runtime.exec() nao vale
Rafael
Considerando uma app swing…
Utiliza:
String BROWSER = "mozilla";
String url = "http://www.guj.com.br";
Runtime.getRuntime().exec(BROWSER+" "+url);
Funciona no linux, acredito que o IE seja a mesma coisa…
Abraços
PS: A segurança não pode sr muit restritiva no sistema
MODIFICADO: Foi mal, postamos juntos Rafael!!!
oi duardor
realmente nao queria essa opcao de Runtime.exec… sera que nao tem outra?
Ih, Paulo, aho difícil, heim!
Runtime faz o fork() numa máquina UNIX [e o execv() depois] no método exec(String), como você pdoeria chamar alguma System Call de dentro da JVM? Na verdade, só criando algo em C e usando JNI
Fora que máquinas UNIX não possuem browser padrão como as Windows. Existe a variáveld e ambiente BROWSER, mas isto é um padrão meio que obscuro.
Mas porque não usar Runtime? É o jeito de exntrar em contato com algumas funções do SO…
[]s
Realmente vai ser difícil. “Browser Padrão” é uma coisa definida no SO.
A linha de comando “mozilla http://www.guj.com.br” só funciona com o mozilla instalado, já “http://www.guj.com.br”, no windows, simplesmente chama o browser padrão, seja qual for. O problema são os outros SOs.
Acho que você deveria criar um método que testa o SO antes e usa uma ou outra forma de jogar uma URL pro SO.
Se houver uma forma de fazer isso sem Runtime.getRuntime() também gostaria de saber…
“Open a default web browser in Java, cross-platform!”
http://browserlauncher.sourceforge.net/
[edit] Depois de enviar essa resposta, fui ler a documentação do tal BrowserLauncher e a única coisa que ele faz é tudo isso o que foi descrito acima, testando o SO e tentando abrir o default (em MacOS e Windows) ou simplemente tentando executar o Netscape (em *x)…meio feio, mas resolve mais ou menos o problema [/edit]
[quote=“dsiviotti”]
Acho que você deveria criar um método que testa o SO antes e usa uma ou outra forma de jogar uma URL pro SO.[/quote]
êpa, testar o SO??!?!
Tipo assim:
#IFDEF UNIX
...
#IFDEF WINDOWS
...
Onde foi mesmo que já vi isso? :lol:
[]s
Se nao vai ajudar, nao atrapalha neh Shoes?!
Pô, é uma santa ajuda, rapá!!
Começa assim: vamos colcar issoaquizinhu só pra versão LINUX… depois vem o inferno dos DEFINEs
Até manpage e readme com #IFDEF, já vi muito disso…
Se é pra ser dependente de SO, é melhor fazer em C++ .
[]s
Qual a sua solucao, entao, Philip?
Pô, é uma santa ajuda, rapá!!
Começa assim: vamos colcar issoaquizinhu só pra versão LINUX… depois vem o inferno dos DEFINEs
Até manpage e readme com #IFDEF, já vi muito disso…
Se é pra ser dependente de SO, é melhor fazer em C++ .
[]s[/quote]
Philip, sei que sua pergunta é brincadeira, mas mesmo que alguém resolva detonar a portabilidade, existem outros mil motivos para usar java ao invés de C++. Fora isso, testar o SO num simples IF e dependendo do resultado executar um ou outro Runtime.getRuntime("linux’, “windows”, “X”) não é nenhum crime. Não afeta em nada a portabilidade já que, se testa antes, pode ser rodar “quase anywhere”.
Li o post que você lincou e concordo com o questionamento do conceito “Browser Padrão”. Windows não tem Gnome nem KDE mas tem Browser Padrão, reflitamos sobre isso. Talvez o problema esteja em como definir um Browser Padrão em um SO que desconhece este conceito, pois ficou parecendo que a culpa é do Java que não tem solução para isso; e não é.
Há algum tempo não uso Linux, mas lembro que não admitia ter que usar um comando ao invés de dar um duplo clique. Por que tenho no Windows e nção tenho no Linux? Sei que existe diferença estrutural entre um e outro mas se um cliente me pede “o programa deve chamar o Browser Padrão ao clicar” eu vou chamar o Browser Padrão, mesmo que tenha que criar a classe BrowserPadrao. :?
Ok, Douglas,
Sim, existem motivos para se utsar C++ e existem motivos para usar Java, isso é uma discussão enoooorme que já foi feita em vários lugares, portanto vamos deixar para lá.
Quanto ao browser padrão no UNIX, lembro que a política máxima do sistema [uma das] é: mechanism, not policy. Ou seja: eu deixo você fazer, não te obrigo a nada. Por isto um UNIX não tem X padrão, gerenciador de janelas padrão, ou algo assim. Tudo é escolha do usuário, do $EDITOR ao $BROWSER
O livro do Raymond é muito bom quanto a uns ‘por que isso é assim?’ no mundinho *NIX.
[]s
Meu amigo pcalcado voce pode simplismente ao instalar seu sistema pedir para o usuario selecionar o caminho do browser padrão dele numa janela tipo FileChooser seria legal, e ele poderia escolher o browser que lhe achasse melhor, ainda poderia testar o SO dar caminhos padrões para determinada plataforma como “c:arquivos de programas …” “/usr/bin/…”, mas se você quer apelar poderia fazer isso no ambiente win32 sem problemas com JNI chamando a API ShellExecute
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
sem $ da URL,pode mostrar conteudo do concorrente ? :shock:
mas isso mandaria a portabilidade para o ralo já que não existe tal função na plataforma *nix mas você tem a escolha !!!
qualquer coisa estamos ai!
fui!
pow kra foi mau, tava meio tarde quando respondi o post e muito cafe sabe né !!! mas aqui esta uma solução que serve para plataforma win32 usando JNI:
Crie um arquivo chamado BrowserPadrao.h com o seguinte conteudo:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class guj_util_BrowserPadrao */
#ifndef _Included_guj_util_BrowserPadrao
#define _Included_guj_util_BrowserPadrao
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: guj_util_BrowserPadrao
* Method: openURL
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_guj_util_BrowserPadrao_openURL
(JNIEnv *, jobject,jstring);
#ifdef __cplusplus
}
#endif
#endif
Depois crie um arquivo chamado BrowserPadrao.cpp com o conteudo:
#include <windows.h>
#include <jni.h>
#include "BrowserPadrao.h"
JNIEXPORT void JNICALL Java_guj_util_BrowserPadrao_openURL(JNIEnv *env, jobject object,jstring url)
{
//Cria um ponteiro para uma "string" com o conteudo da string
//passada fazendo as devidas converssões
const char *str = env->GetStringUTFChars(url, 0);
//Verifica o valor de retorno não e nulo
if(str != NULL)
//Chama a função da API WIN32 ShellExecute para maiores detalhes verique a API
LONG r =(LONG) ShellExecute(NULL, "open",str, NULL, NULL, SW_SHOWNORMAL);
//Faz as devidas limpezas, pois somos programadores limpinhos :)
env->ReleaseStringUTFChars(url, str);
}
Para compilar o exemplo no MSVC, não se esqueça de mudar o diretorio para o do seu SDK
cl -Ic:javasdkinclude -Ic:javasdkincludewin32
-LD BrowserPadrao.cpp -Fbrowserjava.dll
Para compilar no MINGW
gcc -c -Ic:javasdkinclude
-Ic:javasdkincludewin32 BrowserPadrao.cpp
gcc -shared -o BrowserPadrao.dll BrowserPadrao.o
Quem não quiser fazer a DLL pode baixar ela ja pronta daqui
http://www.sicop.com.br/utilbrowser.zip[/url]
Segue abaixo a Classe BrowserPadrao não mude o nome do package, senão tera de ser mudado nos arquivos .h e .cpp
/*
* Created on 16/07/2004
*
* To change the template for this generated file go to
* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
*/
package guj.util;
/**
* @author William J. Oliveira
*
* To change the template for this generated type comment go to
* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
*/
public class BrowserPadrao {
//Carregando a biblioteca .DLL contendo a função nativa
//Carrega apenas uma vez a biblioteca pois esta entre static
static {
Runtime.getRuntime().loadLibrary("browserjava");
}
//Função nativa que abre uma URL com seu programa padrão
//poderia ter implementado melhor para capturar exceptions
//mas estava sem tempo então cuidado com oque passa aqui
//tem de ser uma URL valida :)
public native void openURL(String url);
}
Segue um exemplo de como usar a Classe:
/*
* Created on 16/07/2004
*
* To change the template for this generated file go to
* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
*/
package guj.util;
/**
* @author William J. Oliveira
*
* To change the template for this generated type comment go to
* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
*/
public class Teste {
public static void main(String[] args) {
//Criando uma instancia da classe BrowserPadrao
BrowserPadrao padrao = new BrowserPadrao();
//Abrindo o browser padrão em uma URL especifica
padrao.openURL("http://www.guj.com.br");
//Abrindo o Leitor de Email padrão em com um email especifico
padrao.openURL("mailto:william@sicop.com.br");
//Abrindo um arquivo .mp3 com o Player padrão
padrao.openURL("c:\musicas\something.mp3");
}
}
Bom galera e isso ai, funciona direitinho qualquer duvida podem postar aqui !
e desculpe qualquer coisa
See ya !!![url]