Para que eu possa ter uma melhor localização dos meus erros, não seria mais viável utilizar try{} catch{} em todos os locais que possam ter exceções ao invés de trows, pois o trows me aponta o erro na classe que invocou o método em que ocorreu o erro e não na classe em que ocorreu realmente.
o throws é muito utilizado quando desenvolvemos sistemas em camadas cara… vc trata a exceção somente na camada mais alta, onde é permitida variações de tratamento, sendo transparente aos futuros desenvolvedores o que vc fez nas classes mais baixas… Resumindo, o cara vai poder tratar tuas classes sem realmente saber como elas funcionam… Fora muitas outras facilidades…
public void metodo1(){
try{
metodo2();
}catch (Exception e){
JOptionPane.showMessageDialog(null,e.getMessage());
}
public void metodo2() throws Exception{
metodo3();
}
public void metodo3() throws Exception{
metodo4();
}
public void metodo4() throws Exception{
int a = 5/0;
}
Se eu fizer dessa forma, o NetBeans irá me apontar que o erro aconteceu na chamada do método 2, só que eu não se em qual método o erro realmente aconteceu, se foi no método 3 ou no método 4, dificultando a localização do mesmo.
como disseram, caso o seu método seja responsável por tratar a excessão ele deve usar o try/cath
[code]public void metodo4() {
try {
int a = 5/0;
}
catch(ExcessaoLancadaPeloMetodo4 e) {
}
} [/code]
caso contrário ele passa a bola para quem chamou
public void metodo4() throws ExcessaoLancadaPeloMetodo4{
int a = 5/0;
}
para saber se deve ou não tratar pense nas suas classes como pertencentes a camadas, por exemplo, uma classe de negócio deve tratar excessões de negócio e não de banco de dados por exemplo…
Se vc utilizar o método [b]e.getMessage()[/b] como fêz, vc não irá saber onde exatamente ocorreu o erro; mas se você pedir para a JVM mostra o pilha de erros ( StackTace ) vc verá que a linha onde ocorreu o erro será apresentada, veja a seguir:
java.lang.ArithmeticException: / by zero
at br.com.tsi.sispat.gerenciador.Teste.metodo4(Teste.java:25)
at br.com.tsi.sispat.gerenciador.Teste.metodo3(Teste.java:21)
at br.com.tsi.sispat.gerenciador.Teste.metodo2(Teste.java:17)
at br.com.tsi.sispat.gerenciador.Teste.metodo1(Teste.java:8)
at br.com.tsi.sispat.gerenciador.Teste.main(Teste.java:30)
O erro ocorreu na linha 25 no método br.com.tsi.sispat.gerenciador.Teste.metodo4.
Acho que vc está na verdade querendo controlar a apresentação dos erros através de uma janela, se for isso que vc quer te aconselho a utilizar o método e.getStackTrace(), ele lhe fornece um array com as linhas que descreve a StackTrace.