Exception ClassCastException

7 respostas
Micke

Boa Tarde Pessoal

Axei uns tópicos aqui no guj sobre formatação de JFormatedTextField, mas esta me retornando uma exception que não estou conseguindo resolver, sei oque é mas não consegui resolver :cry:

Estou fazendo do seguinte modo a formatação:

DefaultFormatter formatter = new NumberFormatter(new DecimalFormat("#,##0.00");

ftxtValorUnitario.setFormatterFactory(new DefaultFormatterFactory(formatter));
ftxtValorTotal.setFormatterFactory(new DefaultFormatterFactory(formatter));

//dentro do evento do botao estou fazendo o seguinte

String textUnitario = ftxtValorUnitario.getText();
String textTotal = ftxtValorTotal.getText();

String valueUnitario = textUnitario.replaceAll("\.", "").replaceAll(",", ".");
String valueTotal = textTotal.replaceAll("\.", "").replaceAll(",", ".");

double ValorUnitario = (Double) formatter.stringToValue(valueUnitario); //A exception aponta nessa linha
double ValorTotal = (Double) formatter.stringToValue(valueTotal);

Mas esta me retornando a seguinte exception:

Teria alguma outra forma de fazer essa formatação??
Desde já Agradeço!!!

7 Respostas

vanzella

cara ClassCastException a formatação retorna um Long e não um Double.
O que tu pode tentar e converter.

em vez disso:

double ValorUnitario = (Double) formatter.stringToValue(valueUnitario);

converta:

double ValorUnitario = (Long)formatter.stringToValue(valueUnitario);
maquiavelbona

vanzella:
cara ClassCastException a formatação retorna um Long e não um Double.
O que tu pode tentar e converter.

Ainda vai dar errado. Já perceberam que o cast que vocês estão executando são de Wrappers e que a variável é um tipo primitivo? E formatador não retorna simplesmente um Long, pois o formatador é de decimal, então o mínimo que ele retorna e um Float.

Até!

Micke

Obrigado pela resposta dos dois… maquiavelbona mudei o cast pra float e tambem não funcionou retornou a mesma exception… tem alguma outra dica??? vlw

vanzella

maquiavelbona:
vanzella:
cara ClassCastException a formatação retorna um Long e não um Double.
O que tu pode tentar e converter.

Ainda vai dar errado. Já perceberam que o cast que vocês estão executando são de Wrappers e que a variável é um tipo primitivo? E formatador não retorna simplesmente um Long, pois o formatador é de decimal, então o mínimo que ele retorna e um Float.

Até!


Ola maquiavelbona, não sei se você leu o que a vm disse, mas vai ela ai de novo:

O tipo de retorno do método formatter.stringToValue é um Object, que em tempo de execução é um Long, ou sera que a vm não sabe o que fala? outra coisa, o codigo funciona sim, a não ser que utilize java 1.4

Micke

Realmente vanzella foi como vc disse foi so colocar Long no cast que funcionou… vlw man obrigado pela ajuda…

Mas esta acontecendo o seguinte agora, nao estou conseguindo colocar os centavos, por exemplo:

se eu digitar 12 ele automaticamente transforma para 12,00 mas se eu tentar apagar os zeros e coloar 12,35 ele coloca 1.235,00… nao ta dando pra colocar os centavos!!!

To axando que é pq o tipo de formatação que eu apliquei na FormatedTextField :x

Alguem teria uma dica???

Desde já Agradeço!!!

vanzella

Micke:
Realmente vanzella foi como vc disse foi so colocar Long no cast que funcionou… vlw man obrigado pela ajuda…

Mas esta acontecendo o seguinte agora, nao estou conseguindo colocar os centavos, por exemplo:

se eu digitar 12 ele automaticamente transforma para 12,00 mas se eu tentar apagar os zeros e coloar 12,35 ele coloca 1.235,00… nao ta dando pra colocar os centavos!!!

To axando que é pq o tipo de formatação que eu apliquei na FormatedTextField :x

Alguem teria uma dica???

Desde já Agradeço!!!

da uma olhada, ve se resolve seu problema.(conversão e formatação)

public static void main(String[] args) {
		double valorDouble = 10.35;
		String valorString = "10,35";
		NumberFormat numberFormat = NumberFormat.getInstance();
		numberFormat.setMinimumFractionDigits(2);
		System.out.println(numberFormat.format(valorDouble));
		try {
			System.out.println(numberFormat.parse(valorString));
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
Micke

Uma duvida, porque FormatedTextField n aceita virgula?? ou é porque o tipo de formatação que eu apliquei nela que não deixa colocar a virgula???

Criado 6 de março de 2008
Ultima resposta 7 de mar. de 2008
Respostas 7
Participantes 3