Jump to content

Recommended Posts

Posted

Boas a todos...

Estive a fazer um trabalho e sinceramente, apareceu-me um erro/bug que não consigo compreender, já procurei na net mas também não acho nada de útil e como ultima esperança venho aqui a procura de uma ajudinha...

Um pedaço do código que me da erro é este:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// JOptionPane.showMessageDialog(null, "teste");
boolean Confirm = ConfirmarDados();
// JOptionPane.showMessageDialog(null, "teste");
if (Confirm = false){
JOptionPane.showMessageDialog(this, "Erro ao preencher formulario!");
}

}

é um botão que ao clicar chama uma função "ConfirmarDados" em que verifica se todos os dados introduzidos pelo utilizador estão correctos e depois devolve um boolean, false caso esteja incorrecto e true se estiver tudo bem... mas o problema é que quando chega ao "boolean Confirm = ConfirmarDados();" o resto do código simplesmente não é executado...

já fiz testes (os comentários presentes no código) e a linha antes do "boolean Confirm = ConfirmarDados();" é executada, no entanto a que vem após essa já não é, e não estou a falar do if...

Alguém sabe do que possa ser?

Até já pensei que fosse do return da função "ConfirmarDados" mas sem ele não teria valor para o "Confirm" a nao ser que o passa-se por referencia...

Desde já agradeço pela disponibilidade e pela atenção.

Obrigado!

Posted

A comparação faz-se com o operador == e não com o =.

Não resolve :\ mas muito obrigado 🙂

Coloca a função aqui.

Ok Nuno...

Aqui fica:

private boolean ConfirmarDados() {
// flag
 boolean flag = true;
 //Dados
 String username = Utilizador.getText();
 if (username.equals("")) {
	 this.lUser.setForeground(Color.red);
	 flag = false;
 } else {
	 this.lUser.setForeground(Color.GREEN);
 }
 String password = new String(Password.getPassword());
 String password2 = new String(Password2.getPassword());
 if (password.equals("")) {
	 this.lPass.setForeground(Color.red);
	 this.lPass2.setForeground(Color.red);
	 flag = false;
 } else {
	 if (password.equals(password2)) {
		 this.lPass.setForeground(Color.GREEN);
		 this.lPass2.setForeground(Color.GREEN);
	 } else {
		 if (password != password2) {
			 this.lPass.setForeground(Color.red);
			 this.lPass2.setForeground(Color.red);
			 flag = false;
		 }
	 }
 }
 String nome = Nome.getText();
 if (nome.equals("")) {
	 this.lNome.setForeground(Color.red);
	 flag = false;
 } else {
	 this.lNome.setForeground(Color.GREEN);
 }
 long bi;
 try {
	 bi = Long.valueOf(Bi.getText());
	 this.lBI.setForeground(Color.GREEN);
 } catch (NumberFormatException expt) {
	 this.lBI.setForeground(Color.red);
	 flag = false;
	 // chega aqui se o que estiver no bi nao for um numer
 }
 String morada = Morada.getText();
 if (morada.equals("")) {
	 this.lMorada.setForeground(Color.red);
	 flag = false;
 } else {
	 this.lMorada.setForeground(Color.GREEN);
 }
 String localidade = Localidade.getText();
 if (localidade.equals("")) {
	 this.lLoc.setForeground(Color.red);
	 flag = false;
 } else {
	 this.lLoc.setForeground(Color.GREEN);
 }
 String nacionalidade = Nacionalidade.getText();
 if (nacionalidade.equals("")) {
	 this.lNacio.setForeground(Color.red);
	 flag = false;
 } else {
	 this.lNacio.setForeground(Color.GREEN);
 }
 String telefone = Telefone.getText();
 if (telefone.equals("")) {
	 this.lTele.setForeground(Color.red);
	 flag = false;
 } else {
	 this.lTele.setForeground(Color.GREEN);
 }
 String sexo = Sexo.getName();
 if (sexo == "M") {
	 boolean sexobool = true;
 } else {
	 boolean sexbool = false;
 }
 Calendar Data = Calendar.getInstance();
 String dia = Dia.getName();
 Integer diaCalen = Integer.valueOf(dia);
 String ano = Ano.getName();
 Integer anoCalen = Integer.valueOf(ano);
 Integer mes = Mes.getSelectedIndex();
 Integer mesCalen = mes + 1;
 Data.set(Calendar.DAY_OF_MONTH, diaCalen);
 Data.set(Calendar.MONTH, mesCalen);
 Data.set(Calendar.YEAR, anoCalen);
 // fim dos dados
 return flag;
}

É um pouco extenso, mas é basico...

Obrigado por tudo 🙂

Posted

Se apresentares uma mensagem depois da linha boolean Confirm = ConfirmarDados();, a mensagem aparece?

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Posted

Se apresentares uma mensagem depois da linha boolean Confirm = ConfirmarDados();, a mensagem aparece?

Não...

Esse é o meu problema... queria apresentar uma mensagem caso o boolean fosse false e não consigo...

Posted

se o código não se encontra a ser executado, o normal é ter havido alguma excepção.

uma das hipóteses é o que o @mundo referiu :

Estás a fazer a chamada do método dentro da mesma classe?

(o que não parece ser porque se fosse esse o caso, o compilador diria algo)

o mais normal é acederes a alguma classe não instanciada.

verifica se tens alguma mensagem de erro e apresenta qual

IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

Estás a fazer a chamada do método dentro da mesma classe?

Sim, esta dentro da mesma classe...

se o código não se encontra a ser executado, o normal é ter havido alguma excepção.

uma das hipóteses é o que o @mundo referiu :

(o que não parece ser porque se fosse esse o caso, o compilador diria algo)

o mais normal é acederes a alguma classe não instanciada.

verifica se tens alguma mensagem de erro e apresenta qual

Não tenho nenhuma mensagem de erro, por isso é que estou confuso com isto e não sei se é bug ou erro...

E o problema é que com os testes que fiz, o erro ocorre depois de chamar a função ConfirmarDados()... se apresentar uma mensagem antes disso, funciona tudo bem. Mas tudo o que vem depois disso não é executado...

Edited by NEMESISaka
Posted (edited)

Então o problema está no método confirmarDados.

Já estive a fazer uns testes e sim, o erro esta no método ConfirmarDados...

Na parte:

String sexo = Sexo.getName();
	 if (sexo == "M") {
			 boolean sexobool = true;
	 } else {
			 boolean sexobool = false;
	 }
	 Calendar Data = Calendar.getInstance();
	 String dia = Dia.getName();
	 Integer diaCalen = Integer.valueOf(dia);
	 String ano = Ano.getName();
	 Integer anoCalen = Integer.valueOf(ano);
	 Integer mes = Mes.getSelectedIndex();
	 Integer mesCalen = mes + 1;
	 Data.set(Calendar.DAY_OF_MONTH, diaCalen);
	 Data.set(Calendar.MONTH, mesCalen);
	 Data.set(Calendar.YEAR, anoCalen);
	 // fim dos dados
	 return flag;
}

Tanto no sexo como na data esta a dar o erro...

Poderá ser por ambos os campos serem lidos através de uma combobox?

Obrigado Baderous pela ajuda 🙂

Edit: Problema resolvido, para ajudar futuros programadores com o mesmo problema aqui fica a resposta:

String sexo = (String)Sexo.getSelectedItem();
    boolean sexobool;
    if (sexo.equals("M")) {
	    sexobool = true;
    } else {
	    sexobool = false;
    }
    Calendar Data = Calendar.getInstance();
    String dia = (String)Dia.getSelectedItem();
    Integer diaCalen = Integer.valueOf(dia);
    String ano = (String)Ano.getSelectedItem();
    Integer anoCalen = Integer.valueOf(ano);
    Integer mes = Mes.getSelectedIndex();
    Integer mesCalen = mes + 1;
    Data.set(Calendar.DAY_OF_MONTH, diaCalen);
    Data.set(Calendar.MONTH, mesCalen);
    Data.set(Calendar.YEAR, anoCalen);

O problema era de eu estar a ler mal os dados das combo boxes, assim editei o codigo metendo:

String variavel = (String)variavel.getSelectedItem();

Espero que ajude alguém no futuro...

Desde já um grande obrigado a todos pela a ajuda 🙂

Edited by NEMESISaka
Posted

tens de aprender a verificar as mensagens de erros ...

porque se o problema estava aí de certeza que alguma coisa tinha de aparecer, e muito provavelmente seria no:

Integer.valueOf(dia)

que estaria a originar a excepção : NumberFormatException

algo que deverias ter referido no teu post mas que teimaste em dizer que não aparecia nada :

Não tenho nenhuma mensagem de erro, por isso é que estou confuso com isto e não sei se é bug ou erro...

IRC : sim, é algo que ainda existe >> #p@p
Posted

tens de aprender a verificar as mensagens de erros ...

porque se o problema estava aí de certeza que alguma coisa tinha de aparecer, e muito provavelmente seria no:

Integer.valueOf(dia)

que estaria a originar a excepção : NumberFormatException

algo que deverias ter referido no teu post mas que teimaste em dizer que não aparecia nada :

Mas nao aparecia nenhuma mensagem de erro...

e esse

Integer.valueOf(dia)

esta correcto, pelo menos não me da erro e foi assim que o meu professor me disse para converter as strings para integers...

Como o valor vem de uma combobox, a string é sempre numerica, o problema estava mesmo como estava a ser lida tinha de utilizar

getSelectedItem();

em vez de

getName();

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.