Alterar valor de variavel sem usar excessao

5 respostas
J

No seguinte codigo:

Ex1Functions variaveis = new Ex1Functions();

	byte a = Byte.parseByte(JOptionPane.showInputDialog(null,
		"Digite o valor de A:", "Valor de A",
		JOptionPane.PLAIN_MESSAGE));
	if (a == JOptionPane.CANCEL_OPTION) {
	    variaveis.setA((byte) 0);
	} else {
	    variaveis.setA(a);
	}
	byte b = Byte.parseByte(JOptionPane.showInputDialog(null,
		"Digite o valor de B:", "Valor de B",
		JOptionPane.PLAIN_MESSAGE));
	if (b == JOptionPane.CANCEL_OPTION) {
	    variaveis.setB((byte) 0);
	} else {
	    variaveis.setB(b);
	}
	JOptionPane.showMessageDialog(null, variaveis.toString(),
		"Valores trocados", JOptionPane.PLAIN_MESSAGE);

Quando aperto a opção de cancelar aparece o seguinte erro:

Exception in thread "main" java.lang.NumberFormatException: null
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Byte.parseByte(Unknown Source)
	at java.lang.Byte.parseByte(Unknown Source)
	at ex1test.Ex1Test.main(Ex1Test.java:24)

Eu sei que o botao cancelar retorna null para a variavel e para arrumar eu devo usar um try catch e como excessão o erro java.lang.NumberFormatException.
Porem, fiquei meio perdido, pois se criei a condicao para o valor da variavel ser igual a 0, porque a mesma nao assume esse valor?

5 Respostas

yurifw

pq vc ta tentando converter a variavel pra byte antes de tratar a opção escolhida, no trecho abaixo:

byte a = Byte.parseByte(JOptionPane.showInputDialog(null, "Digite o valor de A:", "Valor de A", JOptionPane.PLAIN_MESSAGE));

outra coisa cara, o inputDialog so vai te retornar o q o cara digitou.

J

yurifw:
pq vc ta tentando converter a variavel pra byte antes de tratar a opção escolhida, no trecho abaixo:

byte a = Byte.parseByte(JOptionPane.showInputDialog(null, "Digite o valor de A:", "Valor de A", JOptionPane.PLAIN_MESSAGE));


Tirei a conversao e ficou assim:

Ex1Functions variaveis = new Ex1Functions();

	String a = JOptionPane.showInputDialog(null,
		"Digite o valor de A:", "Valor de A",
		JOptionPane.PLAIN_MESSAGE);
	if (a.equals(JOptionPane.CANCEL_OPTION)) {
	    variaveis.setA((byte) 0);
	} else {
	    variaveis.setA(Byte.parseByte(a));
	}
	String b = JOptionPane.showInputDialog(null,
		"Digite o valor de B:", "Valor de B",
		JOptionPane.PLAIN_MESSAGE);
	if (b.equals(JOptionPane.CANCEL_OPTION)) {
	    variaveis.setB((byte) 0);
	} else {
	    variaveis.setB(Byte.parseByte(b));
	}
	JOptionPane.showMessageDialog(null, variaveis.toString(),
		"Valores trocados", JOptionPane.PLAIN_MESSAGE);

Porem, continua dando erro nas condicoes.
Erro:

Exception in thread "main" java.lang.NullPointerException
	at ex1test.Ex1Test.main(Ex1Test.java:06)

O JOptionPane vai retornar null apenas quando eu apertar cancelar ou apertar esc.

yurifw

o erro q ta dando agora é pq vc ta jogando null pra variavel a, e em seguida chama a.equals

acho que o que voce n ta entendendo é o retorno do inputDialog, ele retorna uma String, e é a String que o usuario digitou no campo, vc ta querendo comparar o que o usuario digitou com uma constante do tipo int da classe JOPtionPane

tenta fazer assim:

if (a==null) {  
        variaveis.setA(new Byte("0"));  
    } else {  
        variaveis.setA(Byte.parseByte(a));  
    }
J

Realmente, voce tem razão!
Era isso que eu estava pensando. Mas como faço para verificar se o botão cancelar foi pressionado?

yurifw

então, pode fazer do jeito q eu coloquei ali em cima, pq se ele apertar o botão de cancelar, ai o metodo vai retornar null, se não ele vai retornar a String, entendeu?

Criado 2 de maio de 2013
Ultima resposta 2 de mai. de 2013
Respostas 5
Participantes 2