Dúvida com linha de execução do Runtime.getRuntime().exec(); [RESOLVIDO]

3 respostas
gustavogoncalves

Possuo esse código que segue abaixo, e estou com uma dúvida que é o seguinte:

Na primeira parte do código, possui um comando que executa o programa net send pelo DOS do Windows e envia mensagem ao destino qualquer. A variável ipMáquina é obtida através de uma conexão JDBC no banco de dados.
Minha dúvida é: o segundo bloco onde finaliza um programa qualquer não consegue finalizar o executável. Se eu for pelo MS-DOS e executar oc omando por exemplo:

taskkill /s 127.0.0.1 /f /im mspaint.exe

ele finaliza normalmente o programa Paint. assim como as maquinas destino, entretanto colocando esta linha de instrução no programa ele não finaliza. Mas o net send funciona normal.

Alguém sabe o que poderia ser?

Segue abaixo o meu bloco de código:

private void jbExecutarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        if (jbExecutar == evt.getSource()){
            if (jcmbFuncao.getSelectedItem().toString() == "Enviar Mensagem"){
                try{
                    String msg1 = jtaMensagem1.getText().trim();
                    Runtime.getRuntime().exec("c:\\windows\\system32\\net send " + ipMaquina + " " +  msg1 + " ");
                    System.out.println(ipMaquina + msg1 + "");
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            if (jcmbFuncao.getSelectedItem().toString() == "Finalizar Programa"){
                try{
                    String msg1 = jtaMensagem1.getText().trim();
                    Runtime.getRuntime().exec("c:\\windows\\system32\\taskkill /S " + ipMaquina + "/F /IM " + msg1);

                }catch (Exception e){
                    e.printStackTrace();
                }
            }

        }
}

Obrigado desde já.

Edit1: Acredito que seja devido a barra "/" , mas acredito que o único problema que temos que é a barra "\" por ser um caracter de escape. Acho que é isto o problema, só que não sei como resolver isto.

3 Respostas

Pedrosa

Para resolver o problema da barra invertida use \:

public static void main(String[] args) {
  System.out.println("\\");
}

A outra barra compila normal

public static void main(String[] args) {
  System.out.println("/");
}
ViniGodoy
  1. Você deve ler completamente os streams de saída (out e err) do processo. Use o Process retornado pelo Runtime.exec para fazer isso. No Windows, por algum motivo obscuro, o Java as vezes trava se você não fizer isso;
  2. Use o método waitFor() do Process para certificar-se que sua execução terminou, ou que você realmente está esperando o seu termino;
  3. Observe que esse seu código não é mais multi-plataforma.
gustavogoncalves

Obrigado a todos pela ajuda, mas o meu problema era só um espaço na linha:

Runtime.getRuntime().exec("c:\\windows\\system32\\taskkill /S " + ipMaquina + "/F /IM " + msg1);

Onde está o /F eu não dei espaço, então ele identifica o IP da máquina junto com /F ficando assim:

192.168.0.140/F

Onde teria que ser:

192.168.0.140 /F

Hora de trocar o teclado. rs.

Obrigado a todos.

Criado 9 de março de 2009
Ultima resposta 10 de mar. de 2009
Respostas 3
Participantes 3