Olá Pessoal,
Eu estou com uma dúvida na inserção de dados de Jtable no banco, ele exibe seguinte erro"java.lang.String cannot be cast to java.lang.Double"
Alguém pode-me ajudar ai?
Agradeço desde já pela atenção.
Olá Pessoal,
Eu estou com uma dúvida na inserção de dados de Jtable no banco, ele exibe seguinte erro"java.lang.String cannot be cast to java.lang.Double"
Alguém pode-me ajudar ai?
Agradeço desde já pela atenção.
Por favor alguém tem uma ideia desse erro, pois já procurei no net, mas não acho nada concreto.
Isso parece erro do insert e nao da JTable. Voce provavelmente pegou um campo String e esta tentando gravar um Double.
Posta o código do seu insert e onde voce chama com os dados da JTable.
O sr. deve estar trabalhando com o DefaultTableModel lá, uma zica só. Tente isso para adicionar, por exemplo:
[code] public void adicionaNaTabela()
{
String a=txtProduto.getText();
String b=txtValorUnitario.getText();
String c=txtQuantidade.getText();
double n1 = Double.parseDouble(b);
double n2 = Double.parseDouble(c);
DefaultTableModel modelo = (DefaultTableModel)tabela.getModel();
modelo.addRow(new Object [] {a,c,b,(n1*n2)});
}[/code]
Meus amigos muito obrigado pela ajuda, mas enfilizmente não funcionou ainda e continua com erro de "for input String: “2,00”, isso usando ideia do Andre para inclusão no Jtable.
Alguém poderia-me dar uma ideia melhor para resolver este problema?
Desde já agradeço.
Postar o método que adiciona no banco e seu TableModel. E se tiver usando o Default minha dica é PARAR IMEDIATAMENTE.
Este é o método:
public void inserirItemvenda()
{
try{
ItemVenda item = new ItemVenda();
ctrItem = new CTR_ManterItemVenda();
CTR_ManterProduto ctrProdutos = new CTR_ManterProduto();
Produto produto = new Produto();
String aux1="";
String aux2="";
String aux3="";
for (int i = 0 ; i < jtProdutos.getRowCount() ; i++)
{
//if (jtProdutos.getValueAt(i, 0).equals(true))
aux1=(String)jtProdutos.getValueAt(i,2);
item.setValorUnitario(Double.parseDouble(aux1));
aux2=(String)jtProdutos.getValueAt(i, 3);
item.setQuantidade(Double.parseDouble(aux2));
aux3=(String)jtProdutos.getValueAt(i, 4);
item.setValorTotal(Double.parseDouble(aux3));
produto = (Produto) ctrProdutos.carregarProdutoCodigoProduto((Integer) jtProdutos.getValueAt(i, 0));
item.setIdProduto(produto);
item.setIdVenda(venda);
item.setTamanho(String.valueOf(JTxtTamanho));
item.setCor(String.valueOf(JTxtCor));
ctrItem.gravarItemVenda(item);
//}
}
}
Coloca o código de gravarItemVenda()
Boa dia Mark,
Segue o código de GravarItemVenda e método gravar:
public boolean gravarItemVenda(ItemVenda item)
{
try
{
itemHibernateDAO.gravar(item);
return true;
}
catch(HibernateException e)
{
e.printStackTrace();
Logger logAux = Logger.getLogger(CTR_ManterItemVenda.class);
mensagemErro = "Erro gerado pelo sistema: "+e;
log.gerarLog(logAux, mensagemErro);
return false;
}
}
public void gravar(ItemVenda item) throws HibernateException {
Session session = new HibernateFactory().getSession();
session.getTransaction().begin();
session.save(item);
session.getTransaction().commit();
session.close();
}
"for input String: “2,00”
2,00 não é um número válido para ele!
Tente 2.00
Mudei, mas não resolveu nada. Já estou alguns dias tentando resolver isso, quem poder me ajudar agradeço muito.
Alguém pode-me dar uma ideia melhor?
Posta postar a linha do código onde a exception indica?
Vini segue o código de inclusão de item venda:
public void inserirItemvenda()
{
try{
ItemVenda item = new ItemVenda();
ctrItem = new CTR_ManterItemVenda();
CTR_ManterProduto ctrProdutos = new CTR_ManterProduto();
Produto produto = new Produto();
String aux1;
String aux2;
String aux3;
for (int i = 0 ; i < jtProdutos.getRowCount() ; i++)
{
aux1=(String)jtProdutos.getValueAt(i,2);
item.setValorUnitario(Double.parseDouble(aux1));
aux2=(String)jtProdutos.getValueAt(i, 3);
[b]item.setQuantidade(Double.parseDouble(aux2));[/b]
aux3=(String)jtProdutos.getValueAt(i, 4);
[b] item.setValorTotal(Double.parseDouble(aux3));[/b]
produto = (Produto) ctrProdutos.carregarProdutoCodigoProduto((Integer) jtProdutos.getValueAt(i, 0));
item.setIdProduto(produto);
item.setIdVenda(venda);
item.setTamanho(String.valueOf(JTxtTamanho));
item.setCor(String.valueOf(JTxtCor));
ctrItem.gravarItemVenda(item);
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null,"Erro ao persistir objeto item venda: "+e.getMessage());
}
}
segue o código que calcula o preço total:
public Double CalculaprecoTotal(){
String p= jftfPreco.getText();
String q= jftfQuantidade.getText();
Double preco = Double.parseDouble(jftfPreco.getText());
Double quantidade = Double.parseDouble(jftfQuantidade.getText().replace(",", "."));
Double valorTotal = preco * quantidade;
return valorTotal;
}
por último o código que adiciona dados na Jtabela:
[code]private void jbtnAdicionarProdutoActionPerformed(java.awt.event.ActionEvent evt) {
try{
DefaultTableModel dtm = (DefaultTableModel) jtProdutos.getModel();
DefaultComboBoxModel dcbm = (DefaultComboBoxModel) JCBoxCodigoProduto.getModel();
dtm.addRow(new Object[] {JTxtNomeProduto.getText(), dcbm.getSelectedItem().toString(), jftfPreco.getText(), jftfQuantidade.getText(), CalculaprecoTotal()});
}
catch(Exception e){
JOptionPane.showMessageDialog(null,“erro ao adicionar produto na tabela”+e.getMessage());
}
} [/code]
Pode indicar nesse monte de código aí, qual é a linha que a exception aponta?
Ah claro, agora que vi, você engole informação importante da exception. Faça assim no seu catch:
JOptionPane.showMessageDialog(null,"erro ao adicionar produto na tabela"+e.getMessage());
e.printStackTrace();
E no console, após fechar a janela de erro, aparecerá uma descrição detalhada do problema, indicando exatamente em que linha o bug ocorreu, e em que método. Jamais engula informações de exceptions, pois elas são úteis. E sem elas, fica difícil mesmo saber onde procurar o problema.
Aí, vc pode só postar o trecho específico para a gente, destacando com algum comentário a linha que a exception indicou.
Obiragdo Vini, vou fazer isso e retorno já.
Este é o erro que ele exibie:
java.lang.NumberFormatException: For input string: "2,00"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
at br.com.karinhaEstoque.view.formInclusaoVenda.inserirItemvenda(formInclusaoVenda.java:1487)
at br.com.karinhaEstoque.view.formInclusaoVenda.insereVenda(formInclusaoVenda.java:1410)
at br.com.karinhaEstoque.view.formInclusaoVenda.btnIncluirActionPerformed(formInclusaoVenda.java:1008)
at br.com.karinhaEstoque.view.formInclusaoVenda.access$100(formInclusaoVenda.java:18)
at br.com.karinhaEstoque.view.formInclusaoVenda$2.actionPerformed(formInclusaoVenda.java:219)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Ok, agora veja o que sua mensagem de erro diz. Que não pode converter string para double pq o valor 2,00 não é válido. E na exceção, diz também exatamente em que conversão o java está falhando, veja:
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
at br.com.karinhaEstoque.view.formInclusaoVenda.[b]inserirItemvenda/b
Ou seja, no Arquivo formInclusaoVenda.java, na linha 1487, no método inserirItemvenda, da classe formInclusaoVenda.
Tente alterar seu método para:
public void inserirItemvenda()
{
try{
ctrItem = new CTR_ManterItemVenda();
CTR_ManterProduto ctrProdutos = new CTR_ManterProduto();
Produto produto = new Produto();
for (int i = 0 ; i < jtProdutos.getRowCount() ; i++)
{
NumberFormat format = NumberFormat.getInstance();
ItemVenda item = new ItemVenda();
String aux1=(String)jtProdutos.getValueAt(i,2);
item.setValorUnitario(format.parse(aux1));
String aux2=(String)jtProdutos.getValueAt(i, 3);
[b]item.setQuantidade(format.parse(aux2));[/b]
String aux3=(String)jtProdutos.getValueAt(i, 4);
[b] item.setValorTotal(format.parse(aux3));[/b]
produto = (Produto) ctrProdutos.carregarProdutoCodigoProduto((Integer) jtProdutos.getValueAt(i, 0));
item.setIdProduto(produto);
item.setIdVenda(venda);
item.setTamanho(String.valueOf(JTxtTamanho));
item.setCor(String.valueOf(JTxtCor));
ctrItem.gravarItemVenda(item);
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null,"Erro ao persistir objeto item venda: "+e.getMessage());
e.printStackTrace();
}
}
Ou pare de trabalhar com DefaultTableModel, evite esse monte de casts e conversões.
Outra coisa. Java não é C, nem Pascal. Você pode (e deve) declarar as variáveis no ponto mais próximo de onde for usa-las, não no início do método. Isso evita um monte de erros. Por exemplo, você deu vários "new" antes do for. Isso significa que o objeto usado para cada item do JTable será o mesmo. Isso certamente não é verdade para o ItemVenda, já que cada linha representa um item diferente. Aliás, se você estivesse usando o seu próprio model, você também não precisaria criar nenhum objeto novo.
Você também faz uma chamada ao carregarProduto ali no meio do seu for. Fique sabendo que essa é uma operação extremamente ineficiente, e que também poderia ser evitada se você seguisse o conselho que estamos repetindo para você umas 200 vezes, de parar de usar o DefaultTableModel. Se você quiser continuar dando murro em ponta de faca e usar esse modelo, me avise, pois estou muito propenso a não responder tópicos seus com JTable de agora em diante.
Finalmente, esse tópico aqui pertence ao fórum de interface gráfica, não off-topic. Por isso o movimentei.