矩阵在不应为null时被标识为null

时间:2018-12-01 18:38:18

标签: java

我在查找代码错误时遇到问题。我已经做过研究,并且知道错误的含义,我进行了一些测试,并且肯定知道null变量为“ ruta”;但我不明白为什么。请帮助,我将附加整个代码,因为它可能会有所帮助,但是我想重要的部分在300行左右。

/**
* 
* @author Juan Manuel Oceguera Urquiza 000179561
* 01/12/2018
* Clase para configurar la ventana para el programa 'Supermercado'
*
*/
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.border.Border;
public class VistaControladorSupermercado extends JFrame{

protected JPanel miPanel, miPanel2;
protected Border miBorde, miBorde2;
protected JLabel etVacio, etCapacidad, etNombre, etFilas, etColumnas, 
etIndicacion, etWarning, etTipos, etClave;
protected JTextField textNombre, textFilas, textColumnas, textTipos, 
textCapacidad, textClave;
protected JButton ok, alta;
protected String nombre, capacidad;
protected int MAXF, MAXC, longitudTipos, capacity;
protected String[] tipos;
protected Supermercado miSupermercado;
protected ButtonGroup radioTipos;
protected JRadioButton[] radioArreglo;
protected JButton[][] botonMatriz;
protected char type;
protected int[][] ruta;

public VistaControladorSupermercado() {
    super("DATOS GENERALES");
    miPanel= new JPanel(new GridLayout(8,5));
    miBorde= BorderFactory.createEmptyBorder(10, 10, 10, 10);
    miPanel.setBorder(miBorde);

    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etCapacidad= new JLabel("Capacidad:  ", SwingConstants.RIGHT);
    miPanel.add(etCapacidad);
    textCapacidad=new JTextField();
    miPanel.add(textCapacidad);

    etNombre= new JLabel("Nombre del Supermercado:");
    miPanel.add(etNombre);
    textNombre= new JTextField();
    miPanel.add(textNombre);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);

    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);

    etFilas= new JLabel("Numero de Filas:");
    miPanel.add(etFilas);
    textFilas=new JTextField();
    miPanel.add(textFilas);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);

    etColumnas= new JLabel("Numero de Columnas:");
    miPanel.add(etColumnas);
    textColumnas=new JTextField();
    miPanel.add(textColumnas);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);

    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etIndicacion=new JLabel("Introducir tipos separados por puntos");
    miPanel.add(etIndicacion);
    etVacio= new JLabel("");
    miPanel.add(etVacio);

    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etTipos=new JLabel("Tipos:  ", SwingConstants.RIGHT);
    miPanel.add(etTipos);
    textTipos= new JTextField();
    miPanel.add(textTipos);
    etIndicacion= new JLabel("Ej:    Hombre.Mujer.Nino.Nina.Etcetera");
    miPanel.add(etIndicacion);
    etWarning= new JLabel("");
    miPanel.add(etWarning);

    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    etVacio= new JLabel("");
    miPanel.add(etVacio);
    ok= new JButton("CONFIRMAR");
    miPanel.add(ok);
    ok.addActionListener(new ok());
    super.setContentPane(miPanel);
    super.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public class ok implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent arg0) {
            VistaControladorSupermercado a;
            if(textNombre.equals(null) || textCapacidad.equals(null) || 
textFilas.equals(null) || textColumnas.equals(null) || textTipos.equals(null) 
|| 
textNombre.getText().isEmpty() || textFilas.getText().isEmpty() || 
textColumnas.getText().isEmpty() || textCapacidad.getText().isEmpty() || 
textTipos.getText().isEmpty()) {
                etWarning.setForeground(Color.RED);
                etWarning.setText("*LLENAR TODOS LOS CAMPOS");
                etWarning.setHorizontalAlignment(SwingConstants.RIGHT);
            }
            else {
                String tipo;
                nombre=textNombre.getText();
                MAXF=Integer.parseInt(textFilas.getText());
                MAXC=Integer.parseInt(textColumnas.getText());
                capacidad=textCapacidad.getText();
                tipo=textTipos.getText();
                miSupermercado= new Supermercado(nombre);
                miSupermercado.setCapacidad(Integer.parseInt(capacidad));
                miSupermercado.setMAXf(MAXF);
                miSupermercado.setMAXc(MAXC);
                tipos=tipo.split("\\.");
                longitudTipos=tipos.length;
                a=new VistaControladorSupermercado(tipos, miSupermercado, 
longitudTipos);
                a.pack();
                a.setVisible(true);
            }
        }   
    }

    public int[] determinarTamanoPanel2(int unaLongitud, int unMAXC, int 
unMAXF) {
        int[] resp;
        int x;
        resp= new int[2];
        x=unaLongitud;
        if(unMAXC>=x && unMAXC>=4)
            resp[1]=unMAXC;
        else
            if(x>=4)
                resp[1]=x;
            else
                resp[1]=4;
        resp[0]=6+MAXF;
        return resp;
    }

    VistaControladorSupermercado(String[] unosTipos, Supermercado 
unSupermercado, int unaLongitudTipos){
        super("DATOS CLIENTES");
        int[] tamano;
        int maxFilas, maxColumnas, i, j, k, y;
        JRadioButton botonRadio;
        JButton boton;
        nombre=unSupermercado.getNombre();
        MAXF=unSupermercado.getMAXf();
        MAXC=unSupermercado.getMAXc();
        capacity=unSupermercado.getCapacidad();
        tipos=unosTipos;
        longitudTipos=unaLongitudTipos;
        tamano=determinarTamanoPanel2(longitudTipos, MAXC, MAXF);
        ruta=new int[MAXF][MAXC];
        maxFilas=tamano[0];
        maxColumnas=tamano[1];
        miPanel2= new JPanel(new GridLayout(maxFilas,maxColumnas));
        miBorde2= BorderFactory.createEmptyBorder(10, 10, 10, 10);
        miPanel2.setBorder(miBorde2);

        //primera fila
        etNombre= new JLabel(nombre);
        miPanel2.add(etNombre);
        for(i=1;i<maxColumnas-2;i++) {
            etVacio=new JLabel("");
            miPanel2.add(etVacio);
        }
        etCapacidad=new JLabel("Capacidad: ", SwingConstants.RIGHT);
        miPanel2.add(etCapacidad);
        etCapacidad=new JLabel(Integer.toString(capacity));
        miPanel2.add(etCapacidad);
        //segunda fila
        etClave= new JLabel("Clave:");
        miPanel2.add(etClave);
        textClave=new JTextField();
        miPanel2.add(textClave);
        for(i=2;i<maxColumnas-1;i++) {
            etVacio=new JLabel("");
            miPanel2.add(etVacio);
        }
        //tercera fila
        etVacio=new JLabel("");
        miPanel2.add(etVacio);
        etTipos=new JLabel("Tipo:");
        miPanel2.add(etTipos);
        for(i=1;i<maxColumnas-1;i++) {
            etVacio=new JLabel("");
            miPanel2.add(etVacio);
        }
        //cuarta fila
        etVacio=new JLabel("");
        miPanel2.add(etVacio);
        radioTipos= new ButtonGroup();
        radioArreglo=new JRadioButton[longitudTipos];
        for(i=0;i<longitudTipos;i++) {
            botonRadio=new JRadioButton(tipos[i]);
            radioArreglo[i]=botonRadio;
            radioArreglo[i].setActionCommand(Integer.toString(i));
            radioTipos.add(radioArreglo[i]);
            radioArreglo[i].addActionListener(new radio());
            miPanel2.add(radioArreglo[i]);
        }
        for(i=longitudTipos-1;i<maxColumnas-1;i++) {
            etVacio=new JLabel("");
            miPanel2.add(etVacio);
        }
        //quinta fila
        for(i=0;i<maxColumnas-2;i++) {
            etVacio=new JLabel("");
            miPanel2.add(etVacio);
        }
        etIndicacion=new JLabel("");
        miPanel2.add(etIndicacion);
        alta=new JButton("ALTA");
        miPanel2.add(alta);
        alta.addActionListener(new alta());
        //sexta fila
        for(i=0;i<maxColumnas;i++) {
            etVacio=new JLabel("");
            miPanel2.add(etVacio);
        }
        //demas filas
        botonMatriz=new JButton[MAXF][MAXC];
        if(maxColumnas==MAXC) {
            for(i=0;i<MAXF;i++)
                for(j=0;j<MAXC;j++) {
                    boton= new JButton();
                    botonMatriz[i][j]=boton;
                    botonMatriz[i][j].setActionCommand(""+i+"."+j);
                    botonMatriz[i][j].addActionListener(new boton());
                    miPanel2.add(botonMatriz[i][j]);
                }
        }
        else {
            y=maxColumnas-MAXC;
            for(i=0;i<MAXF;i++) {
                for(k=0;k<y;k++) {
                    etVacio=new JLabel("");
                    miPanel2.add(etVacio);
                }
                for(j=0;j<MAXC;j++) {
                    boton= new JButton();
                    botonMatriz[i][j]=boton;
                    botonMatriz[i][j].setActionCommand(""+i+"."+j);
                    botonMatriz[i][j].addActionListener(new boton());
                    miPanel2.add(botonMatriz[i][j]);
                }
            }
        }
        super.setContentPane(miPanel2);
        super.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }//constructor

    public class radio implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            char resp;
            resp=e.getActionCommand().charAt(0);
            type=resp;
        }
    }
    public class alta implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent arg0) {
            boolean exitosa;
            String unaClave;
            unaClave=textClave.getText();
            if(!unaClave.equals(null) && type!='\0') {
                exitosa=miSupermercado.altaCliente(unaClave, type, ruta);
                if(exitosa) {
                    etIndicacion.setForeground(Color.GREEN);
                    etIndicacion.setText("Alta exitosa");
                }
                else {
                    etIndicacion.setForeground(Color.RED);
                    etIndicacion.setText("Alta NO exitosa");
                }
            }
            else {
                etIndicacion.setForeground(Color.RED);
                etIndicacion.setText("Alta NO exitosa");
            }
        }   
    }

    public class boton implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            int f,c;
            String s, sa[];
            s=e.getActionCommand();
            sa=s.split("\\.");
            f=Integer.parseInt(sa[0]);
            c=Integer.parseInt(sa[1]);
            if(ruta[f][c]==0) {
                ruta[f][c]=1;
                botonMatriz[f][c].setBackground(Color.GREEN);
            }
            else {
                ruta[f][c]=0;
                botonMatriz[f][c].setBackground(Color.DARK_GRAY);
            }
            }
        }

}//class

这是错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at VistaControladorSupermercado$alta.actionPerformed(VistaControladorSupermercado.java:305)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

0 个答案:

没有答案