¿Cómo arreglar un StackOverflowError generado por un evento JTable?

Obtengo un StackOverflowError cuando intento llenar una celda con la multiplicación de otras dos celdas de la misma fila. Aquí está el código:

tableModel.addTableModelListener(new TableModelListener(){
            public void tableChanged(TableModelEvent e)
            {
                DefaultTableModel model = (DefaultTableModel)e.getSource();
                //Object data = model.getValueAt(e.getFirstRow(), e.getColumn());
                if (e.getColumn() == 0)
                {
                    Object data = model.getValueAt(e.getFirstRow(), e.getColumn());
                    String stockSymbol = (String)data;
                    XMLService2 myService = new XMLService2(stockSymbol);
                    String stockName = XMLService2.getStockName();
                    model.setValueAt(stockName, e.getFirstRow(), e.getColumn() + 1);
                }
                if (model.getValueAt(e.getFirstRow(), 2) != null && model.getValueAt(e.getFirstRow(), 3) != null)
                {
                    Double myDouble =(Integer)model.getValueAt(e.getFirstRow(), 2)*(Double)model.getValueAt(e.getFirstRow(), 3);
                    model.setValueAt(myDouble, e.getFirstRow(), 4);
                }
            }
        });

La última línea de este código que llama a la función setValueAt está produciendo el StackOverflowError. Gracias.

PD: La tabla consta de 5 columnas. El tipo de la tercera columna es Entero. El tipo de la cuarta columna es Doble. El tipo de la quinta columna que obtiene el resultado de la multiplicación de la tercera y la cuarta celda es Doble.

Respuesta 1

El programa está cayendo en un ciclo recursivo sin fin (al menos hasta que la pila se desborde) porque la última model.setValueAtlínea dispara otro tableChangedevento. Intente cambiar la segunda declaración condicional a

if (e.getColumn() != 4 && model.getValueAt(e.getFirstRow(), 2) != null && model.getValueAt(e.getFirstRow(), 3) != null)

Esto debería evitar que el evento se vuelva a disparar cuando se actualice la última columna.

Respuesta: 2

Quiero probar un método unitario que establezca la propiedad activa de la clase Persona en Verdadero. La clase Person tiene muchas otras propiedades: public class Person {private int id; Boolean privado ...

Tengo una ruleta, que ya contiene algunos elementos. Estoy tratando de agregar un nuevo elemento después de obtenerlo de otra actividad mediante setResult y onActivityResult: protected void onActivityResult (...

Necesito escanear la pantalla en busca de una imagen / color específico y devolver una coordenada x e y para saber dónde se produce ese color. Sé que esto probablemente incluirá tomar una captura de pantalla usando la clase Robot, ...

Cuando intento eliminar datos de mi clase de servicio utilizando el método personalizado deleteBy () en el repositorio de datos de Spring, aparece el siguiente error. javax.persistence.TransactionRequiredException: Sin EntityManager ...