Boa noite a todos.
Sou de nível iniciante/médio e estou fazendo um programa em grupo para a faculdade em Java no Eclipse que envolve interface gráfica e no qual preciso tratar exceções.
A tela inicial que o programa mostra requisita alguns campos numéricos e devo tratar algumas possíveis exceções com eles.
Configuramos que ao clicar no botão “Avançar”, segue-se para a próxima página e é executado todo o resto do programa (tudo dentro do ActionListener do botão avançar).
O meu problema é que eu gostaria que, se houver alguma exceção com alguma variável da tela inicial, ele não permita que o usuário avance para o próximo passo, mas sim que ele continue na tela inicial e permita que o usuário faça alterações
Tentei usar um “do while” como uso quando não há interface gráfica, mas depois entendi que não funciona porque o lugar no qual estou colocando-o faz com que o programa apenas releia os valores já colocados e não dê oportunidade do usuário alterar os valores. Por conta disso, acaba capturando as exceções infinitamente.
Postei o exemplo de como fiz com apenas uma das variáveis requisitadas na tela inicial porque o código está muito extenso, mas se for necessário, posso mostrar mais.
Não sei se ficou claro, mas desde já agradeço.
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String nAtivo = nomeAtivo.getText();
int nAnos = 0;
do {
try {
nAnos = Integer.parseInt(Anos.getText());
recusarNegativo((double)nAnos);
recusarZero((double)nAnos);
tenteDeNovo = false;
} catch (InputMismatchException e) {
JOptionPane.showMessageDialog(null, "Entrada envalida","Erro", JOptionPane.ERROR_MESSAGE);
} catch (NegativoException e) {
JOptionPane.showMessageDialog(null, "\n" + e.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
} catch (ZeroException e) {
JOptionPane.showMessageDialog(null, "\n" + e.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Erro não previsto no programa", "Erro", JOptionPane.ERROR_MESSAGE);
}
} while (tenteDeNovo == true);