onde errei? estou aprendendo
Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
at View.CadProduto.validarFormulario(CadProduto.java:421)
at View.CadProduto.SalvarActionPerformed(CadProduto.java:259)
at View.CadProduto.access$200(CadProduto.java:17)
at View.CadProduto$3.actionPerformed(CadProduto.java:97)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6535)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
na linha 421
if (((Double) PrecoCompra.getValue()) <= 0) {
JOptionPane.showMessageDialog(this, “Preço de compra inválido.”, “Alerta”, JOptionPane.WARNING_MESSAGE);
PrecoCompra.requestFocus();
return false;
na linha 259
if (validarFormulario()) {
produto.setNome(NomeProduto.getText().trim());
produto.setPrecoCompra((Double) PrecoCompra.getValue());
produto.setPrecoVenda((Double) PrecoVenda.getValue());
na linha 17
public class CadProduto extends javax.swing.JFrame {
na linha 97
SalvarActionPerformed(evt);
Tenta fazer o cast fora do if e guarda em uma variavel e usa essa variavel no if.
O seu PrecoCompra.getValue()
retorna um objeto Long
e você está tentando fazer cast para Double
.
São tipos de dado incompatíveis.
Lembre-se que long
é diferente de Long
, assim com double
é diferente de Double
.
2 curtidas
Poderia me mostrar um exemplo ?
fiz o cast fora, mas quando salvo o valor que aparece é o da variavel e não o que digitei
O código está funcionando exceto quando o decimal do número é 0. Por exemplo, ele funciona quando o valor é “2.1”, mas não quando é “2.0”. Isso é quando ele lança a seguinte exceção:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
PrecoCompra
e PrecoVenda
são objetos de qual classe?
O getValue()
deles está retornando um objeto da classe Long
e você está tentando fazer cast para Double
, isso não é possível pois não há polimorfismo entre Long
e Double
.
Você está ciente de que Long
e Double
. não são a mesma coisa que long
e double
?.
public class Produto {
int codigo;
String nome;
Double precoCompra;
Double precoVenda;
int quantidade;
/**
* @return the codigo
*/
public int getCodigo() {
return codigo;
}
/**
* @param codigo the codigo to set
*/
public void setCodigo(int codigo) {
this.codigo = codigo;
}
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @return the precoCompra
*/
public Double getPrecoCompra() {
return precoCompra;
}
/**
* @param precoCompra the precoCompra to set
*/
public void setPrecoCompra(Double precoCompra) {
this.precoCompra = precoCompra;
}
/**
* @return the precoVenda
*/
public Double getPrecoVenda() {
return precoVenda;
}
/**
* @param precoVenda the precoVenda to set
*/
public void setPrecoVenda(Double precoVenda) {
this.precoVenda = precoVenda;
}
/**
* @return the quantidade
*/
public int getQuantidade() {
return quantidade;
}
/**
* @param quantidade the quantidade to set
*/
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
}
private void SalvarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if (validarFormulario()) {
produto.setNome(NomeProduto.getText().trim());
produto.setPrecoCompra((Double) PrecoCompra.getValue());
produto.setPrecoVenda((Double) PrecoVenda.getValue());
if (produto.getCodigo() == 0) {
try {
controlProduto.inserir(produto);
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, "Erro ao inserir o produto.\n" + ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
return;
}
} else {
try {
controlProduto.alterar(produto);
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, "Erro ao alterar o produto.\n" + ex.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
return;
}
}
habilitarFormulario(false);
carregarGrade();
}
}
No código acima, PrecoCompra
e PrecoVenda
são objetos de que tipo?
estou com o mesmo problema ao inserir 1.25 ele aceita agora ao inserir 1.00 da a exceção
Como já foi mencionado nas respostas anteriores, não existe compatibilidade entre Long e Double pra se trabalhar com casting, Ao invés de fazer o casting, vc pode optar pela transformação abaixo:
Long l = new Long(1234);
Double db = new Double(l.longValue());
System.out.println(db); //1234.0
No seu contexto, poderia ser algo do tipo:
produto.setPrecoCompra(new Double(PrecoCompra.getValue().longValue()));
ou simplesmente alterar o método getValue() pra ja fazer esse processo de conversão e devolver um Double diretamente.
1 curtida