Parando um catch

Boa tarde

Tenho um try/catch e no caso ele use a exception ele tem dar tipo um Stop e parar de rodar o bloco de intruções, no meu caso fiz o seguinte, um método para cadastrar os itens do JTable no banco de dados, caso ele não consiga ele joga uma mensagem alertando o usuário, mas dae no método que chama ele, continua a executar o bloco, dae aparece outra mensagem perguntando se ele quer cadastrar outros itens!!! Então não sei se fui bem claro mas vou simplificar, quero que na hora que ele passe pelo catch…

} catch (SQLException e) { JOptionPane.showMessageDialog(this, "Não foi possível cadastrar esses sorteios!!!"); }

… tenha algum código ali que faça parar a instrução!!! No VB se me lembro bem era usado o Exit Sub, se fosse função usava-se Exit Function!!

Obrigad

Vc pode usar o System.exit(0); depois da chamada da JOptionPane, mas ai ele irá terminar a execução do sistema, se isso nao for problema, pode usar na boa :slight_smile:

Dê um “return” para acabar com a execucao do metodo:

Logicaente, se o tipo de retorno nao for void, vc tem que retornar um null, por exemplo.

Uma outra opcao seria ter uma variavel de controle booleana, como “hasErrors”, e usar ela para decidir se continua a executar o codigo ou nao.

Rafael

Cara, não dá pra fazer algo assim:

try {
     dao.insereNoBanco( sorteios );
     JOptionPane.showMessageDialog(this, "Voce deseja cadastrar mais um sorteio ? ");
} catch (SQLException e) {
		JOptionPane.showMessageDialog(this, "Não foi possível cadastrar esses sorteios!!!");
	}

Que tal um simples return; ??? :slight_smile:

Se eu entendi bem vc quer sair do método sem executar o que esta após o try/catch neh ?! Então um return; (se o método tiver como tipo de retorno void basta) .
Lembrando que mesmo dando um return; o finally será executado, se houver um bloco finally claro! :lol:

O codigo que eu postei eh com return ja :smiley:

Rafael

Eitaaa, quantos posts hehe!! Valeu gente, eu vou usar o return, o método é void então é simples return né!? se fosse um método boolean dae seria return false!? Interessante isso, chegando em casa vou testar!!

Obrigado

Hei povo, não deu certo ele ainda continuou o método!!! e se eu criasse o método public boolean insereBanco() e jogasse um return false será que mudaria alguma coisa?! Eu ainda não sei muito bem quando usar os public String coisa() public boolean coisa()!!!

O código do Rafael funciona. Senão você fez alguma cagada aí.

Bom eu fiz exatamente igual o dele!! Deixa eu explicar um pouco mais!!!

Existem dois métodos, o insereTabela() e o insereBanco(), o insere banco é essa que eu uso o catch pra avisar que não foi possivel cadastrar, o insereTabela vai inserindo no JTable até dar 5 linhas e na 5 ele cadastra(Chamando o método insereBanco()) e pergunta se desejo cadastrar novo sorteio!! Então era isso que eu queria, porque quando dá o erro de inserção, ele ainda continua o bloco, jogando a menssagem se eu quero inserir um novo sorteio, era isso que eu queria evitar!!! Simplificando, o método insereTabela() evoca o insereBanco() caso as linhas sejam == 5!!!

Será que o problema do return seja isso!?

Põe o código aqui… já é tarde e eu não consigo mais mentalizá-lo.

Estude o básico primeiro, então… sem saber isso é praticamente impossível fazer algo(que use exception, por exemplo) e entender o que está acontecendo :wink:

[code]public void insereTabela() {
String txt1 = txtData.getText(), txt2 = txtNum.getText(), txt3 = (String)cboHora.getSelectedItem();
int numTabela = tabela.getRowCount();

if (numTabela == 1 && resposta == false) {
tabela.removeRow(0);
tabela.addRow(new String[] {txt1,txt2,txt3});
resposta = true;
} else if (numTabela >= 5 && resposta == true) {
if ((String)cboHora.getSelectedItem() == “14:00”) {
insereBanco();
int n = JOptionPane.showConfirmDialog(this, “Este foi o primeiro sorteio do dia?\nDeseja cadastrar o sorteio das 18:00!?”,"", JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
cboHora.setSelectedIndex(1);
txtNum.requestFocus();
limpaTable();
}
}
} else {
tabela.addRow(new String[] {txt1,txt2,txt3});
}
}

public void insereBanco() {
String valorHora = (String)cboHora.getSelectedItem();
String txt = txtData.getText();
String row1, row2, row3;
int cod;

if (valorHora == “14:00”) {
try {
stm = conn.createStatement();
rs = stm.executeQuery(“SELECT * FROM horario1”);
rs.last();
String codigo = rs.getString(“cod”);
cod = Integer.parseInt(codigo);

		if (cod == 0) {
			cod = 1;
		} else {
			cod++;
		}
			for (int i = 0; i < 5; i++) {
				row1 = (String)tabela.getValueAt(i,0);
				row2 = (String)tabela.getValueAt(i,1);
				row3 = (String)tabela.getValueAt(i,2);
				int rs2 = stm.executeUpdate("INSERT INTO horario1 VALUES(" + cod + ", '" + row1 + "','" + row2 + "','" + row3 + "')");
			}
} catch (SQLException e) {
	JOptionPane.showMessageDialog(this, "Não foi possível cadastrar esses sorteios!!!");
}

} else {
try {
stm = conn.createStatement();
rs = stm.executeQuery(“SELECT * FROM horario2”);
rs.last();
String codigo = rs.getString(“cod”);
cod = Integer.parseInt(codigo);

		if (cod == 0) {
			cod = 1;
		} else {
			cod++;
		}
			for (int i = 0; i < 5; i++) {
				row1 = (String)tabela.getValueAt(i,0);
				row2 = (String)tabela.getValueAt(i,1);
				row3 = (String)tabela.getValueAt(i,2);
				int rs2 = stm.executeUpdate("INSERT INTO horario2 VALUES(" + cod + ", '" + row1 + "','" + row2 + "','" + row3 + "')");
			}
} catch (SQLException e) {
	JOptionPane.showMessageDialog(this, "Não foi possível cadastrar esses sorteios!!!");
}

}
}[/code]

Gente só um detalhe, raramente o catch vai ser acionado, ou talvez nunca vai ser acionado, a não ser que de algum problema no BD, mas por questão da coisa ficar mais profissional, que caso de um problema ele já pare por ali, sem continuar nada!!! :wink:

Nesse caso ou vc retorna um boolean, por exemplo, onde false indica falha ou lança uma exceção, onde o método externo deve saber como tratar.

basta um return; para ele sair do metodo já que ele é void… beleza? até… :smiley:

Gozado não parou, mas enfim, desisto, dexa quieto :wink:

Obrigado a todos

Flw

Cagada sua, pode apostar! haahahahahhaha 8)

De fato. Um return finaliza a execucao do metodo, sem choro.

Rafael