Declarando try catch

7 respostas
H

Pessoal, para cada parte do método eu tenho que declarar o catch?

Por que existem 4 partes do meu método que podem ocorrer exeções, mas todos os tratamentos são iguais, não tem como colocar uma coisa mais global?

Exemplo:

package controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Observable;
import javax.swing.JOptionPane;
import view.InterfaceAgenda;
import view.TabelaDeVisualizacao;

public class Agenda extends Observable implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent ev) {
		if (ev.getSource() == InterfaceAgenda.botao1) {
			try {
				new InserirContato().inserir(
						InterfaceAgenda.nomeFieldInserir.getText(),
						InterfaceAgenda.telefoneFieldInserir.getText(),
						InterfaceAgenda.emailFieldInserir.getText());
				JOptionPane.showMessageDialog(null,
						"Cadastro realizado com sucesso");

			} catch (ClassNotFoundException e) {
				JOptionPane.showMessageDialog(null,
						"Driver do banco de dados não encontrado.");
			} catch (SQLException e) {
				JOptionPane.showMessageDialog(null,
						"Ocorreu um erro com o banco de dados");
			}
		} else if (ev.getSource() == InterfaceAgenda.botao2) {
			String id = InterfaceAgenda.idFieldVisualizar.getText();
			if (id == null) {
				JOptionPane.showMessageDialog(null, "Digite um ID");
			} else {
				try {
					int i = Integer.parseInt(id);
					ArrayList lista = new VisualizarContato().obterDados(id);
					new TabelaDeVisualizacao(lista);
				} catch (NumberFormatException nfe) {
					JOptionPane.showMessageDialog(null, "Digite um ID válido");
				}
			}
		} else if (ev.getSource() == InterfaceAgenda.botao3) {
			try {
				new AtualizarContato().atualizar(
						InterfaceAgenda.idFieldAtualizar.getText(),
						InterfaceAgenda.nomeFieldAtualizar.getText(),
						InterfaceAgenda.telefoneFieldAtualizar.getText(),
						InterfaceAgenda.emailFieldAtualizar.getText());
				JOptionPane.showMessageDialog(null,
						"Atualização realizada com sucesso");

			} catch (ClassNotFoundException e) {
				JOptionPane.showMessageDialog(null,
						"Driver do banco de dados não encontrado.");
			} catch (SQLException e) {
				JOptionPane.showMessageDialog(null,
						"Ocorreu um erro com o banco de dados");
			}
		} else if (ev.getSource() == InterfaceAgenda.botao4) {

		} else if (ev.getSource() == InterfaceAgenda.botao5) {

		}
	}
	public static void main(String[] args) {
		new InterfaceAgenda();
	}
}

7 Respostas

igor_ks

neste caso que eh comum

} catch (ClassNotFoundException e) {  
                JOptionPane.showMessageDialog(null,  
                        "Driver do banco de dados não encontrado.");  
            } catch (SQLException e) {  
                JOptionPane.showMessageDialog(null,  
                        "Ocorreu um erro com o banco de dados");  
            }

vc pode comecar o try antes dos ifs e terminar o catch depois dos ifs

H

Como não pensei nisso antes? :lol:

Valeu!

igor_ks

rs, estamos ae!

H

Só mais uma dúvida, se fosse em métodos diferentes eu tería que declarar duas vezes?

Exemplo:

void inserirContato() {
		try {
			new InserirContato().inserir(
					InterfaceAgenda.nomeFieldInserir.getText(),
					InterfaceAgenda.telefoneFieldInserir.getText(),
					InterfaceAgenda.emailFieldInserir.getText());
			JOptionPane.showMessageDialog(null,
					"Cadastro realizado com sucesso");

		} catch (ClassNotFoundException e) {
			JOptionPane.showMessageDialog(null,
					"Driver do banco de dados não encontrado.");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null,
					"Ocorreu um erro com o banco de dados");
		}
	}

	void atualizarContato() {
		try {
			new AtualizarContato().atualizar(
					InterfaceAgenda.nomeFieldAtualizar.getText(),
					InterfaceAgenda.telefoneFieldAtualizar.getText(),
					InterfaceAgenda.emailFieldAtualizar.getText());
			JOptionPane.showMessageDialog(null,
					"Atualização realizada com sucesso");

		} catch (ClassNotFoundException e) {
			JOptionPane.showMessageDialog(null,
					"Driver do banco de dados não encontrado.");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null,
					"Ocorreu um erro com o banco de dados");
		}

	}
furacao123

depende onde voce ira chamar esses metodos, se quiser voce pode passar a excecao para frente usando o Throws

void inserirContato() Throws ClassNotFoundException, SQLException { 
...}

e a classe que chama o metodo voce coloca o try

void grava(Contato contato) {

try {

 if(isAlteracao) {
 atualizarContato
} else {
 inserirContato();
}


} catch (ClassNotFoundException e) {  
            JOptionPane.showMessageDialog(null,  
                    "Driver do banco de dados não encontrado.");  
        } catch (SQLException e) {  
            JOptionPane.showMessageDialog(null,  
                    "Ocorreu um erro com o banco de dados");  
        }
H

Agora eu entendi bem a relação do throws com o try catch!

Valeu a cara! :smiley:

furacao123

o certo seria, se voce estivesse trabalhando em camadas, a view ficar responsavel por mostrar os JOptionDialog, entao voce vais disparando por throws ate a view e mostra na tela.

Agora se quiser ir mais longe, voce pode criar suas proprias Classes que extendem Exception, e nela voce cria as mensagens, e quando alguma coisa acontecer voce dispara um throw new MinhaException()

Mas se voce ja entendeu e resolveu o que precisava esta de bom tamanho :smiley:

Criado 11 de novembro de 2011
Ultima resposta 11 de nov. de 2011
Respostas 7
Participantes 3