我在查找代码错误时遇到问题。我已经做过研究,并且知道错误的含义,我进行了一些测试,并且肯定知道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)