Error Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6 >= 6

1,640 views
Skip to first unread message

Andres Infante

unread,
Nov 7, 2012, 11:44:53 AM11/7/12
to jav...@googlegroups.com
Buenas tardes.

Tengo el siguiente codigo:


package interfaz;
import Front.InfoFacturas;
import auxiliar.DAO.FachadaFacturaFinalAux;
import javax.swing.table.DefaultTableModel;
import java.util.ArrayList;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import org.apache.log4j.Logger;

/**
 *
 * @author Andres Infante
 */
public class FrameBuscarHojaTrabajo extends javax.swing.JFrame {

    /**
     * Creates new form FrameBuscarHojaTrabajo
     */
    public FrameBuscarHojaTrabajo() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    private static Logger logger = Logger.getLogger(FrameBuscarHojaTrabajo.class);
    private JTable jTableFacturas;
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jTextBoxNumeroFactura = new javax.swing.JTextField();
        jLabelNumeroFactura = new javax.swing.JLabel();
        jButtonConsultarFacturas = new javax.swing.JButton();
        jScrollPaneTablaFacturas = new javax.swing.JScrollPane();

        setTitle("Pretražiti Radni Nalog");
        setPreferredSize(new java.awt.Dimension(940, 680));

        jTextBoxNumeroFactura.setPreferredSize(new java.awt.Dimension(200, 20));

        jLabelNumeroFactura.setText("Radni Nalog:");

        jButtonConsultarFacturas.setText("Traži");
        jButtonConsultarFacturas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonConsultarFacturasActionPerformed(evt);
            }
        });

        jScrollPaneTablaFacturas.setBackground(new java.awt.Color(255, 255, 255));
        jScrollPaneTablaFacturas.setPreferredSize(new java.awt.Dimension(800, 300));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(0, 22, Short.MAX_VALUE)
                        .addComponent(jScrollPaneTablaFacturas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(254, 254, 254)
                                .addComponent(jLabelNumeroFactura)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(jTextBoxNumeroFactura, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(350, 350, 350)
                                .addComponent(jButtonConsultarFacturas)))
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(49, 49, 49)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelNumeroFactura)
                    .addComponent(jTextBoxNumeroFactura, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(27, 27, 27)
                .addComponent(jButtonConsultarFacturas)
                .addGap(34, 34, 34)
                .addComponent(jScrollPaneTablaFacturas, javax.swing.GroupLayout.PREFERRED_SIZE, 274, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(30, Short.MAX_VALUE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-848)/2, (screenSize.height-495)/2, 848, 495);
    }// </editor-fold>                       

    private void jButtonConsultarFacturasActionPerformed(java.awt.event.ActionEvent evt) {                                                        
        try {
            String numFacturaTXT = jTextBoxNumeroFactura.getText();

            if (!numFacturaTXT.isEmpty()) {
                int numFactura = Integer.parseInt(numFacturaTXT);

                FachadaFacturaFinalAux objFachadaFactura = new FachadaFacturaFinalAux();
                ArrayList listaFacturas = objFachadaFactura.ConsultarHojaTrabajoXNumero(numFactura);

                Object[] columnNames = new Object[8];
                columnNames[0] = "Item";
                columnNames[1] = "id";
                columnNames[2] = "Num. Factura";
                columnNames[3] = "Num. Recibido";
                columnNames[4] = "Fecha Entrega";
                columnNames[5] = "Fecha Factura";
                columnNames[6] = "Total";
                columnNames[7] = "idProducto";
               

                DefaultTableModel modelo = new DefaultTableModel(columnNames, 0) {

                    @Override
                    public boolean isCellEditable(int row, int column) {
                        //all cells false
                        return false;
                    }
                };
                Object[] invData = new Object[8];

                int i = 1;
                for (Object inv : listaFacturas) {
                    InfoFacturas objInv = (InfoFacturas) inv;

                    invData[0] = i;
                    invData[1] = objInv.getId();
                    invData[2] = objInv.getNumDocumento();
                    invData[3] = objInv.getNumRecibido();
                    invData[4] = objInv.getFechaEntrega();
                    invData[5] = objInv.getFechaFactura();
                    invData[6] = objInv.getTotal();
                    invData[7] = objInv.getIdProducto();

                    modelo.addRow(invData);

                    i++;
                }

                jTableFacturas = new JTable(modelo);
                //jTableFacturas.removeColumn(jTableFacturas.getColumnModel().getColumn(1));
              //  jTableFacturas.removeColumn(jTableFacturas.getColumnModel().getColumn(3));
              //  jTableFacturas.removeColumn(jTableFacturas.getColumnModel().getColumn(4));
                jTableFacturas.removeColumn(jTableFacturas.getColumnModel().getColumn(6));
              //  jTableFacturas.removeColumn(jTableFacturas.getColumnModel().getColumn(7));
                jTableFacturas.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

                jScrollPaneTablaFacturas.setViewportView(jTableFacturas);
                jTableFacturas.addMouseListener(new java.awt.event.MouseAdapter() {

                    @Override
                    public void mouseClicked(java.awt.event.MouseEvent evt) {
                        if (evt.getClickCount() == 2) {
                            jTableFacturasMouseClicked(evt);
                        }
                    }
                });
            } else {
            }
        } catch (Exception e) {
            logger.debug(e.getCause());
        }
    }                                                       
     private void jTableFacturasMouseClicked(java.awt.event.MouseEvent evt){
        if (evt.getButton()!= java.awt.event.MouseEvent.BUTTON1) {
            return;
        }
       
        //obtengo el Id de la factura seleccionada para buscarla en la BD y mostrar el formulario
        int idFactura = Integer.parseInt(jTableFacturas.getValueAt(jTableFacturas.getSelectedRow(), 1).toString());
        int idProducto = Integer.parseInt(jTableFacturas.getValueAt(jTableFacturas.getSelectedRow(), 6).toString());
       
        //Llamar el framde que muestra los datos de la factura para editar
        FrameEditarHojaTrabajo objEditarHoja = new FrameEditarHojaTrabajo(idFactura, idProducto);
        objEditarHoja.setVisible(true);
    }
    // Variables declaration - do not modify                    
    private javax.swing.JButton jButtonConsultarFacturas;
    private javax.swing.JLabel jLabelNumeroFactura;
    private javax.swing.JScrollPane jScrollPaneTablaFacturas;
    private javax.swing.JTextField jTextBoxNumeroFactura;
    // End of variables declaration                  
}


Cuando le doy doble click para que me abra la otra ventana despues de la consulta me sale esto:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6 >= 6
    at java.util.Vector.elementAt(Vector.java:427)
    at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
    at interfaz.FrameEditarHojaTrabajo.agregarProductoFactura(FrameEditarHojaTrabajo.java:568)
    at interfaz.FrameEditarHojaTrabajo.buscarDatosFactura(FrameEditarHojaTrabajo.java:489)
    at interfaz.FrameEditarHojaTrabajo.<init>(FrameEditarHojaTrabajo.java:65)
    at interfaz.FrameBuscarHojaTrabajo.jTableFacturasMouseClicked(FrameBuscarHojaTrabajo.java:183)
    at interfaz.FrameBuscarHojaTrabajo.access$100(FrameBuscarHojaTrabajo.java:18)
    at interfaz.FrameBuscarHojaTrabajo$3.mouseClicked(FrameBuscarHojaTrabajo.java:163)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
    at java.awt.Component.processMouseEvent(Component.java:6270)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6032)
    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:4577)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
    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)

Se que funcionaba bien porque lo probe una vez y todo iba bien, pero ahora sale este error, ya he revisado la definicion de los array y esta supuestamente Ok. Si alguien tiene una idea de que mas debo revisar se lo agradezco.

Saludos.

--
Andrés Infante Sánchez

Pablo Lillia

unread,
Nov 7, 2012, 7:27:11 PM11/7/12
to jav...@googlegroups.com
El 07/11/12 13:44, Andres Infante escribió:
Buenas tardes.

Tengo el siguiente codigo:

...
Se que funcionaba bien porque lo probe una vez y todo iba bien, pero ahora sale este error, ya he revisado la definicion de los array y esta supuestamente Ok. Si alguien tiene una idea de que mas debo revisar se lo agradezco.

Saludos.

--
Andrés Infante Sánchez


No estoy seguro de algunos métodos si hacen tareas que puedan demorar o con I/O, como una consulta a una base y cosas así. Como consejo general con Swing, nunca hay que poner el "código de negocio" en el thread-UI (el hilo que atiende a los eventos de Swing), porque esto puede (y va a hacerlo) bloquear la UI, generando una mala experiencia para el usuario. Aparte, de que es un problema de diseño, y a poco de crecer la aplicación, se torna imposible de mantener por la mezcla de responsabilidades diferentes (de distintas capas) en un solo lugar.

Otro problema, es que cuando hagas cambios sobre los componentes Swing, siempre hay que hacerlo en el Thread-UI (el caso opuesto a lo anterior). Esto es porque Swing no es thread-safe, y no hacerlo si que trae problemas muy feos, con fallos que ocurren de forma interrumpida, de forma no determinística, porque son errores de concurrencia. Esto se maneja de varias maneras, con buenas prácticas como SwingUtilities.invokeLater() o SwingWorker. Absolutamente todo lo que sea modificación de UI, hay que hacerlo así.

Creo que hay una combinación de ambos temas.

Algunos links:
http://stackoverflow.com/questions/2564388/javas-swing-threading
http://stackoverflow.com/questions/940913/how-to-prevent-swing-gui-locking-up-during-a-background-task

Slds.-
Pablo

Andres Infante

unread,
Nov 8, 2012, 3:54:58 AM11/8/12
to jav...@googlegroups.com
Vale Pablo muchas gracias por tu contestacion, voy a revisarlo entonces..

--
www.JavaSOS.com
---
Has recibido este mensaje porque estás suscrito al grupo "JavaSOS" de Grupos de Google.
Para anular tu suscripción a este grupo, envía un correo electrónico a javasos+u...@googlegroups.com
Visita este grupo en http://groups.google.com/group/javasos?hl=es.
 
 



--
Andrés Infante Sánchez
Ingeniero de Sistemas
Mobile +381 637760000
Beograd - Srbija

Reply all
Reply to author
Forward
0 new messages