Tratamento de erros

9 respostas
M

Tudo bem?

Não estou conseguindo personalizar minhas mensagens de erro utilizando throw e throws. A mensagem que aparece é sempre a do Java. Estou fazendo o seguinte:

Classe throws Exception {

metodo () {

if () {

throw new Exception (Erro na aplicação);

} else ok;

}

}

principal {

Metodo m = new Metodo ();
     try {
     m.metodo ();
      } catch (Exception e) {
           syso (e.getMessage ()); //exibe a mensagem do Java e não "Erro na aplicação"
      }

}

Como devo proceder???

9 Respostas

sergiotaborda
metalbhz:
Não estou conseguindo personalizar minhas mensagens de erro utilizando throw e throws. A mensagem que aparece é sempre a do Java. Estou fazendo o seguinte:
Classe throws Exception {
      metodo () {
            if (...) {
                 throw new Exception ("Erro na aplicação");
             } else ok;
       }      
}

principal {

         Metodo m = new Metodo ();
         try {
         m.metodo ();
          } catch (Exception e) {
               syso (e.getMessage ()); //exibe a mensagem do Java e não "Erro na aplicação"
          }
}

Como devo proceder???

Personalizar a exceção significa criar uma classe que herde de Exception (mais formalmente de Throwable ou qq subclasse dele)

Por exemplo

public class MyException extends Exception {
   
   public MyException (String msg){
    super(msg);
  }

}
M

Valeu pela dica, mas como ficaria o tratamento na classe principal (throws e try)?

newbcc

Isso cara. Agora você faz um try-catch e no catch você chama a exceção que foi criada. No caso

} catch ( MyException e ) {

e.getMessage();
}

Até mais

M

Obrigado, mas continua não funcionando. Olha o que fiz:

public class NovaExcecao extends Exception {

public NovaExcecao (String msg) {
	super (msg);
}

}

public class Dividir {

public double divisao (double n, double d) throws NovaExcecao {

	if (d == 0) {
		throw new NovaExcecao ("Deu erro");
		//return 0.0;
	} else {
		return n/d;
	}
}

}

public class TesteErro {

public void main (String [] args) {
	
	teste ();
}

public void teste () {
	Dividir d = new Dividir();
	double r = 0;
	try {
		r = d.divisao (3,1);
	} catch (NovaExcecao ne) {
		System.out.println(ne.getMessage()); 
	} 
		System.out.println("A divisão é: "+r);
}

}

O que sai no console é: “java.lang.ArithmeticException: / by zero” e não "“Deu erro”.

O que pode ser???

M

Não deu certo. :frowning:

M

Alguém aí pode esclarecer as dúvidas?

leandro.anjos

Vamos por parte. A primeira coisa a ser feita é criar a classe que extends Exception

import javax.swing.JOptionPane;
public class MinhaException extends Exception {
	public MinhaException(String msg) {
		super();
		JOptionPane.showMessageDialog(null, msg, "Erro inesperado",
				JOptionPane.ERROR_MESSAGE);
		// Caso voce esteja utilizando logger
		// log.error(msg);
	}
}

Note que eu uso o Componente (Objeto) JOptionPane para exibir a mensagem de erro, neste caso eu uso o método showMessageDialog passando como parametros um componente(null), a mensagem e o titulo.

Agora basta usar o throw para criar uma nova instância do nosso objeto de tratamento de exceção:

public class TesteErro {
	public static void main(String[] args) throws MinhaException {
		int num1 = 4;
		int num2 = 1;
		System.out.println("Primeiro valor: " + num1);
		System.out.println("Segundo valor: " + num2);
		if (num2 == 0) {
			throw new MinhaException(
					"Não é possível realizar uma divisão por 0.");
		}
		System.out.println("Resultado: ");
		double result = num1 / num2;
		System.out.println(num1 + " / " + num2 + " = " + result);
	}
}

Note que o meu método main não lança um objeto Exception e sim um MinhaException.

Para finalizar segue a saida do código acima (Sem Erro):
Primeiro valor: 4
Segundo valor: 1
Resultado:
4 / 1 = 4.0

Agora basta trocar o valor do atributo num2 para 0 que a exceção será lançada e tratada. Segue a saida:
Primeiro valor: 4
Segundo valor: 0
Exception in thread “main” MinhaException
at TesteErro.main(TesteErro.java:11)

Isso é tudo, mas este é apenas um exemplo simples, nada que se deva ser usado em um grande projeto, ele é util apenas para aprendizado, porem meu conselho é que você consulte alguns livros para ter um conhecimento mais aprofundado sobre Exceções.

M

Valeu Leandro. Muito obrigado!

sergiotaborda

leandro.anjos:
Vamos por parte. A primeira coisa a ser feita é criar a classe que extends Exception

import javax.swing.JOptionPane;
public class MinhaException extends Exception {
	public MinhaException(String msg) {
		super();
		JOptionPane.showMessageDialog(null, msg, "Erro inesperado",
				JOptionPane.ERROR_MESSAGE);
		// Caso voce esteja utilizando logger
		// log.error(msg);
	}
}

Não coloque codigo visual na exceção , muito menos no construtor. Coloque esse codigo no catch da aplicação principal

Criado 29 de agosto de 2008
Ultima resposta 1 de set. de 2008
Respostas 9
Participantes 4