Boa tarde, hoje é minha primeira postagem no fórum, sempre visito, mas hoje resolvi me cadastrar para postar uma dúvida…
É o seguinte…
Estou tentando abrir a calculadora do windows através do seguinte código abaixo, já tentei de duas maneiras que vi aqui no fórum… new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Runtime.getRuntime().exec("calc");//assim
Runtime.getRuntime().exec("C:\Windows\System32\calc.exe"); //e assim
}
}
porém, não funciona com nenhum dos dois jeitos, aparece o seguinte erro no MyEclipse…
“Unhandled exception type IOexception”
Já tentei importar o pacote Java.io.*;
Já tentei o “add throws declaration” do MyEclipse…
Já tente o Surround with try/catch… o erro some só q continua o mesmo erro…
Primeiro, use as tags code para colocar o seu código.
Depois, ele reclama que você não tratou uma exception ( IOException ) e se eu não me engano o MyEclipse cria um try/catch vazio, então na verdade você silenciou a exceção. Tente executar pelo terminal o seu programa e veja se ele não mostra nada ali.
[quote=maquiavelbona]Primeiro, use as tags code para colocar o seu código.
Depois, ele reclama que você não tratou uma exception ( IOException ) e se eu não me engano o MyEclipse cria um try/catch vazio, então na verdade você silenciou a exceção. Tente executar pelo terminal o seu programa e veja se ele não mostra nada ali.
Até![/quote]
Você poderia ser um pouco mais “claro”? Eu estou iniciando em java, então não estou entendendo bulufas do que vc está falando… kkk… que tags code são essas?
A tag code fica na parte superior da onde você coloca seu texto aqui.
Silenciar uma exceção é quando você tem um try/catch e você não envia a exceção para ninguém ( não imprime, não guarda, simplesmente joga fora ). Isso acontece quando você cria um bloco de catch vazio( sem código algum). Coloque no dentro do catch algum comando para ele mostrar na tela o erro ( um e.printStackTrace(); pode ser o suficiente por enquanto, sendo e a variável que pegou a exceção - catch(IOException e) - por exemplo ) e volte a postar aqui.
[quote=rodolpho_maia][quote=maquiavelbona]Primeiro, use as tags code para colocar o seu código.
Depois, ele reclama que você não tratou uma exception ( IOException ) e se eu não me engano o MyEclipse cria um try/catch vazio, então na verdade você silenciou a exceção. Tente executar pelo terminal o seu programa e veja se ele não mostra nada ali.
Até![/quote]
Você poderia ser um pouco mais “claro”? Eu estou iniciando em java, então não estou entendendo bulufas do que vc está falando… kkk… que tags code são essas?
“Corrigindo um erro…” a opção “Surround with try/catch” que fica sem erros, e não a “add trows declaration”…
a solução do nosso amigo daniel tb não deu certo…[/quote]
bom e que fazer a chamada a um arquivo externo a sua aplicação e considerada uma operação de risco visto que é bem comum o caminho estar errado ou arquivo nao exisitir ou qualquer outro erro, a sua aplicação tem que se prevenir disto, então o java força voce a se preparar tratando a provavel exceção ou declarando ela.
tratar ela seria fazer o bloco try/catch(IOException) , que resolveria logo de cara
agora caso voce não queira tratar essa exceção dentro do seu metodo pode usar na declaração do metodo que faz essa operação a palavra throws IOExcepetion tipo
public void usaCalculadora() throws IOException {
//abre calc aqui
}
mas ai quem fizer uso do seu metodo usaCalculadora vai ter que fazer try/catch ou declarar via throws tambem… lembrando que throws vai ta repassando a exceção ate
chegar no metodo main da sua aplicação…
resumindo: se tu quer resolver logo poe um try/catch =p
E ai galera… consegui resolver o problema da seguinte maneira… só que descobri que o erro era outro…rs
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
Runtime.getRuntime().exec("C:\Windows\System32\calc.exe");
}
catch (IOException e1)
{
JOptionPane.showMessageDialog(null, "Caminho do arquivo não encontrado !" + "\nEsta opção abre a calculadora do windows !" +
"\nC:\Windows\System32\calc.exe", "", JOptionPane.ERROR_MESSAGE);
}
}
}
O que acontece…
Eu tinha um menu Calculadora, menu “pai”, e por ele, esse comando não funciona, não acontece nada…
Então fiz um teste, coloquei um menu Arquivo, “pai”, e um submenu “Calculadora”, e então o comando funcionou normalmente, e testei o catch tb, agora tá tudo certo, mas gostaria que entrasse logo no menu “pai” Calculadora, entenderam? Valeu pela ajuda…
Existe um problema no Java que nã funcionam os eventos do ActionListener em um JMenu, então se quiser colocar esse comando direto na barra “pai” voce precisa adicionar direto um JMenuItem no lugar do JMenu.
Amigo , não é possivel colocar um ActionListener em um Menu, somente em MenuItem…
Caso queira executar algo quando clicar no Menu, utilize onMouseClicked
como disseram, “não é possível” executar um ActionListener direto no JMenuBar , então faça assim
JMenuBar mb = new JMenuBar();
JMenu menu = new JMenu( "Aplicativos");
JMenuItem executaCalc = new JMenuItem("Calculadora");
menu.add(executaCalc);
mb.add(menu); //criamos um MenuBar com Menu e um item nesse Menu
copiei o try do nosso amigo
executaCalc.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
Runtime.getRuntime().exec("calc"); //assim
Runtime.getRuntime().exec("C:\Windows\System32\calc.exe"); //e assim
}catch(Exception erro){
System.err.println("Deu pau!");
}
}
});
usei aqui e não funcionou porque estou usando Linux, então dá erro no caminho, mas se usar no Windows acho que funciona.