[Resolvido] - Somando as linhas de um JTable com BigDecimal

14 respostas
CarlosFontana

Boa noite, estou tentando somando os valores das linhas de um JTable da seguinte forma:

for (int i = 0; i < tabela.getRowCount(); i++) {
      BigDecimal valor =  (BigDecimal) tabela.getModel().getValueAt(i, 2);
            
      soma = soma.add(valor); // Erro
            
      JOptionPane.showMessageDialog(null, "" + tabela.getRowCount());
      JOptionPane.showMessageDialog(null, "" + valor);
}

mas está retornando erro na linha em que eu marquei, alguém sabe me dizer onde estou errando?

14 Respostas

marciosouzajunior

Qual classe do erro?

CarlosFontana

Blz Marcio, faço essa verificação quando aciono o botão confirmar, além da linha que mencionei o segundo erro é:

public void actionPerformed(ActionEvent event) {
            fireActionPerformed(event);
}
marciosouzajunior

Certo Carlos mas qual é o erro gerado pelo compilador?

CarlosFontana

Então, o primeiro erro de saída ele aponta para essa linha:

soma = soma.add(valor);  <--

o segundo erro:

protected void fireActionPerformed(ActionEvent event) {
        // Guaranteed to return a non-null array
        Object[] listeners = listenerList.getListenerList();
        ActionEvent e = null;
        // Process the listeners last to first, notifying
        // those that are interested in this event
        for (int i = listeners.length-2; i>=0; i-=2) {
            if (listeners[i]==ActionListener.class) {
                // Lazily create the event:
                if (e == null) {
                      String actionCommand = event.getActionCommand();
                      if(actionCommand == null) {
                         actionCommand = getActionCommand();
                      }
                      e = new ActionEvent(AbstractButton.this,
                                          ActionEvent.ACTION_PERFORMED,
                                          actionCommand,
                                          event.getWhen(),
                                          event.getModifiers());
                }
                ((ActionListener)listeners[i+1]).actionPerformed(e); <--
            }          
        }
    }

o terceiro erro:

public void actionPerformed(ActionEvent event) {
            fireActionPerformed(event); <--
}

o quarto erro:

protected void fireActionPerformed(ActionEvent e) {
        // Guaranteed to return a non-null array
        Object[] listeners = listenerList.getListenerList();
        // Process the listeners last to first, notifying
        // those that are interested in this event
        for (int i = listeners.length-2; i>=0; i-=2) {
            if (listeners[i]==ActionListener.class) {
                // Lazily create the event:
                // if (changeEvent == null)
                // changeEvent = new ChangeEvent(this);
                ((ActionListener)listeners[i+1]).actionPerformed(e); <--
            }          
        }
}

:confused:

maurijava

Carlos,

O que o Marcio está falando é pra você colocar qual é a descrição da excessão que está dando, não onde o erro está acontecendo.


 Coloca ai a excessão pra gente  uma olhada...

Sds,

Mauríjava.

CarlosFontana

Blz Maurijava!?

aqui está:

java.lang.NullPointerException

at Movimentos.Telas.TelaMovimentoCompra.confirmar(TelaMovimentoCompra.java:204)

at Estrutura.TelaCadastro.actionPerformed(TelaCadastro.java:304)

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:2478)

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)
maurijava

Agora ficou mais claro!

O erro NullPointException sempre acontece quando você aponta para uma variável ou método que não existe (um ponto nulo), você deve pode não ter instanciado corretamente o vetor soma. Instancie este vetor na própria classe ou declare ele como static para poder acessálo diretamente.

Sds,

Maurijava.

CarlosFontana

Obrigado pelo esclarecimento Maurijava, minha dificuldade está persistindo então pelo fato de soma não ser um vetor e sim apenas uma variável do tipo BigDecimal. Vou tentar modificar aqui, valeu!

maurijava

Acho quê o que você está querendo é mais ou menos isso:

soma= soma + valor;

sendo assim você não precisa de vetores para isso, é só somar numa variável simples mesmo.

Sds,

Mauríjava.

CarlosFontana

Fazendo assim eu volto para o mesmo erro, pois a soma do BigDecimal é com .add(variável), fiz a modificação que você mencionou sobre o instanciamento e o erro permanece, muito estanho…

marciosouzajunior

Antes de fazer a soma faça:

System.out.println("Valor: " + valor);

Veja se vai dar erro nesta linha.

maurijava

Veio,

Então é assim:
for (int i = 0; i < tabela.getRowCount(); i++) {  
          BigDecimal valor =  (BigDecimal) tabela.getModel().getValueAt(i, 2);  
                  
          soma.add(valor);  
                  
          JOptionPane.showMessageDialog(null, "" + tabela.getRowCount());  
          JOptionPane.showMessageDialog(null, "" + valor);  
          }

Segue o link da API: http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html

CarlosFontana

Boa tarde Maurijava, blz!? Fiz a alteração mas o sistema para na linha da soma, vou verificar o link que você adicionou, valeu!

Marcio, não dá erro na linha que você disse para adicionar, ele mostra o valor digitado correto, havia adicionado um JOptionPane antes para verificar o valor que a variável “valor” estava recebendo e demonstrava o valor digitado normalmente, porém não consegue efetuar a soma da variável “valor”.

CarlosFontana

Consegui! He he, da seguinte forma:

BigDecimal  soma = BigDecimal.ZERO;
   for(int i = 0; i < tabela.getRowCount(); i++){
       String valor = tabela.getValueAt(i, 2)+"";
       BigDecimal valorIcmsProduto = new BigDecimal(valor.replace(",", "."));
       soma = soma.add(valorIcmsProduto);
       JOptionPane.showMessageDialog(null, "" + soma);
}

Exemplo: Felagund

Obrigado a todos, valeu!

Criado 14 de março de 2012
Ultima resposta 18 de mar. de 2012
Respostas 14
Participantes 3