Caso dê uma Exception, gostaria de rodar uma bat

10 respostas
D

Bem, se meu programa der erro ele vai para uma Exception, nessa Exception gostaria de rodar uma arquivo.bat, essa bat tem a configuração de um email, caso dê algum erro na hora de rodar o programa essa bat vai me mandar um email avisando sobre o erro.

a pergunta é a seguinte, como posso chamar um arquivo.bat dentro do java, teria como eu fazer isso??

Ex.



catch(SQLException ex)

{

System.out.println(Falha no sql…”)

mail.bat :!:  :?:  <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/c.pngry.png?v=9" title=":cry:" class="emoji" alt=":cry:">

}

Não como referenciar o mail.bat ali dentro, como faço para executar a BAT ali dentro???

Um abraço.

10 Respostas

Rafael_Steil

Use o metodo exec() da classe Runtime para isso:

Runtime.getRuntime().exec("programa.bat");

Rafael

Leonardo

Só pra constar você pode incrementar seu tratamento de erros (com uma Classe) e criar um método para enviar um email, por exemplo usando as configurações de um Propertie File. Por exemplo:

public class MailException extends java.lang.RuntimeException {

   private String code = "br.mypkg";

   public String getCode() {
      return code;
   }

   //exemplo do tutorial do GUJ
   protected void sendMail() {
      Properties p = new Properties();
      p.put("mail.host", "smtp2.locaweb.com.br");

      Session session = Session.getInstance(p, null);
      MimeMessage msg = new MimeMessage(session);

      try {
          // "de" e "para"!!
          msg.setFrom(new InternetAddress("[email removido]"));
          msg.setRecipient(Message.RecipientType.TO, new InternetAddress  ("[email removido]"));

       // nao esqueca da data!
       // ou ira 31/12/1969 !!!
       msg.setSentDate(new Date());

       msg.setSubject("assunto da mensagem");

       msg.setText("corpo da mensagem");

       // evniando mensagem (tentando)
       Transport.send(msg);
   }
   catch (AddressException e) {
       // nunca deixe catches vazios!
   }
   catch (MessagingException e) {
       // nunca deixe catches vazios!
   }

   }

   protected void setCode(String code) {
      this.code = code;
   }

   public MailException(String code, String msg) {
      super(msg);
      setCode(code);
      sendMail();
   }

   public MailException(String code, String msg, Throwable ex) {
      super(msg, ex);
      setCode(code);
      sendMail();
   }

}

De uma olhada neste tutorial:

Espero que ajude.

Boa sorte ! :smiley:

D

Mas teria como eu chamar esse código dentro do meu programa, ou seja, se eu compliar este código teria como eu chamar esse .class dentro do meu código, ou seria melhor adaptá-lo dentro do meu programa??

um abraço.

D

Rafael, o problema agora é que não está executando a bat.

Eu fiz a chamada dela assim:

o path é o camninho da bat

String path1 = D:\j2sdk1.4.1\bin\Bat;



catch (SQLException sqlex)

{

System.err.println(sqlex);

sqlex.printStackTrace();

Runtime.getRuntime().exec(""+path1+Mail.bat);

System.exit(1);

}

Não sei o que está acontecendo mas não está executando a Bat!!?? :?:

Rafael_Steil

Acho que falta o cmd.exe na frente:

Runtime.getRuntime().exec("cmd.exe comando.bat");

Rafael

D

Não rodou!!! continou na mesma, se eu executar o .bat na mão ele me manda um email, mas pelo programa não manda!!!

Estou usando assim atualmente!!

Runtime.getRuntime().exec(“cmd.exe d:j2sdk1.4.1inatMail.bat”);

Existe alguma outra forma?? :cry:

Leonardo

Darta, acho que o problema pode estar na forma como vc passa o caminho do arquivo:

Runtime.getRuntime().exec("cmd.exe d:j2sdk1.4.1inBatMail.bat");

tente usar as sequencias de escape: Runtime.getRuntime().exec("cmd.exe d:\j2sdk1.4.1\bin\BatMail.bat");

Paulo_Silveira

a barra invertida nao funciona direito no forum

darta, se esse bat apenas manda um email, voce deveria fazer isso pelo java, e NUNCA por um .bat, nunca mesmo.

pode tirar fora o cmd.exe da frente, faca apenas com o d:\bla\blah.bat

teste e rode

D

Paulo, concordo com voce plenamente, mas não estou consseguindo fazer um script java que envie um email, já peguei o código que tem aqui disponível, ele compila mas na hora de rodar ele dá um erro, já até postei isso na outra menssagem!!

Vou rodar o java que envia o email e depois coloco o erro aqui novamente!!

um abraço.

DavidUser

estive com mesmo problema, só que queria pegar o resultado que o prompt dá…

não conheço nenhuma outra forma de pegar esse resultado:
meu bat:

dir > registro.txt

" na execução de um bat comum ele cria o arquivo registro.txt com o resultado do dir "

mas quando uso:

Runtime.getRuntime().exec("..\bla\arquivo.bat")

ele não cria o arquivo

Criado 11 de março de 2003
Ultima resposta 22 de nov. de 2009
Respostas 10
Participantes 5