如何修复stackoverflow错误

时间:2012-10-06 09:15:16

标签: java jframe jpanel

我创建了3个JPanel类和1个JFrame类。这3个JPanel类通过实例化相互连接(因为在另一个类中需要一个类的某些属性)。我想将所有3个JPanel类放到JFrame类中,但我收到一条错误消息。

错误

 java.lang.StackOverflowError
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at       sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:244)
at javax.swing.UIDefaults.getUI(UIDefaults.java:751)
at javax.swing.UIManager.getUI(UIManager.java:989)
at javax.swing.JPanel.updateUI(JPanel.java:109)
at javax.swing.JPanel.<init>(JPanel.java:69)
at javax.swing.JPanel.<init>(JPanel.java:92)
at javax.swing.JPanel.<init>(JPanel.java:100)
at ComputerSeats.<init>(ComputerSeats.java:17)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)
at ComputerSeats.<init>(ComputerSeats.java:13)
at Student.<init>(Student.java:11)

ComputerSeats课程

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ComputerSeats extends JPanel implements ItemListener
{
private JLabel seatNum;
private JRadioButton[] seat = new JRadioButton[10];
private ButtonGroup seatGroup = new ButtonGroup();
private boolean[] seatOccupied =  new boolean[10];
private String str = "";
private int station=0, occupiedSeatCounter=0;
private Student stud = new Student();
private Monitor mtr = new Monitor();

public ComputerSeats()
{


    setPreferredSize(new Dimension(200,200));
    setBorder(BorderFactory.createLoweredBevelBorder()); 
    setBackground (Color.yellow); 
    setLayout(null);
    //SETS THE JPANEL THAT DISPLAYS STATION NUMBER OPTIONS

    seatNum = new JLabel("Station Numbers: ");
    seatNum.setLocation(60,90);
    seatNum.setSize(600,400);
    add(seatNum);

   createSeatNumbers();
}

public void itemStateChanged(ItemEvent e)
{
    for(int i=0 ; i<10 ; i++)
    {
        if(e.getSource() == seat[i])
            station = (i+1);
    }
}

public void createSeatNumbers()
{
    int x=50,y=150;
    for(int i=0 ; i<10 ; i++)
    {
        switch(i)
            {
                case 0: str = "1"; break;
                case 1: str = "2"; break;
                case 2: str = "3"; break;
                case 3: str = "4"; break;
                case 4: str = "5"; break;
                case 5: str = "6"; break;
                case 6: str = "7"; break;
                case 7: str = "8"; break;
                case 8: str = "9"; break;
                case 9: str = "10"; break;
            }
        seat[i] = new JRadioButton(str);
        seat[i].setSize(60,40);
        seat[i].setLocation(x,y);
        seat[i].addItemListener(this);
        seat[i].setBackground(Color.green);
        seatGroup.add(seat[i]);
        add(seat[i]);
        x=110;

        if((i+1)%2==0)
        {
           x=50;
            y=y+30;
        }
    }

    for(int i=0 ; i<10 ; i++)
    {
        seatOccupied[i] = false;
    }
}

public void occupySeat()
{
    seatOccupied[station-1] = true;
    for(JLabel jl: mtr.showArrayIdVal()) { jl.setText(stud.showField().getText());  }
    seat[station-1].setBackground(Color.red);
    occupiedSeatCounter++;
}

public void leaveSeat()
{
    mtr.showArrayIdVal()[station-1].setText("Vacant Station");
    seat[station-1].setBackground(Color.green);
    seatOccupied[station-1] = false;
    stud.showField().setText("");
}
public void showError(int num)
{
    if(num == 0)
    {
        JOptionPane.showMessageDialog(null, "Select your Station Number", "ERROR!",JOptionPane.ERROR_MESSAGE);
    }
    else if(num == 1)
    {
        JOptionPane.showMessageDialog(null, "This Station is Vacant!", "ERROR!",JOptionPane.ERROR_MESSAGE);
    }
    else if(num == 2)
    {
        JOptionPane.showMessageDialog(null, "Station Occupied", "ERROR!",JOptionPane.ERROR_MESSAGE);
    }

}

 public int showStation()
 {
        return station;
    }

 public boolean getSeatOccupied()
 {

        return seatOccupied[station-1];
 }

}

学生班

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Student extends JPanel implements ActionListener
{

private JLabel studNum;
private JTextField studNumTF;
private JButton logInB, logOutB;
private ComputerSeats compSeat = new ComputerSeats();

public Student()
{
    //SET UP PANEL

    setPreferredSize(new Dimension(80,200));
    setBorder(BorderFactory.createLoweredBevelBorder()); 
    setBackground (Color.yellow); 
    setLayout(null);

    studNum = new JLabel("Enter Your Student Number: ");
    studNum.setLocation(30,20);
    studNum.setSize(200,100);

    studNumTF = new JTextField(7);
    studNumTF.setLocation(50,80);
    studNumTF.setSize(120,30);

    logInB = new JButton("Log In");
    logInB.setSize(100,30);
    logInB.setLocation(15,350);
    logInB.setBackground(Color.orange);
    logInB.addActionListener(this);

    logOutB = new JButton("Log Out");
    logOutB.setSize(100,30);
    logOutB.setLocation(125,350);
    logOutB.setBackground(Color.orange);
    logOutB.addActionListener(this);

    //ADD OBJECTS TO PANEL

    add(studNum);
    add(studNumTF);
    add(logInB);
    add(studNum);

}

public void actionPerformed(ActionEvent e) 
{ 
    //PERFORM OOPERATION AFTER CLICKING A BUTTON

    if(e.getActionCommand() == "Log In")
    {
        logIn();
    }

    if(e.getActionCommand() == "Log Out")
    {
        logOut();
    }
} 

public JTextField showField()
{
    return studNumTF;
}

public void logIn()
{

    if(compSeat.showStation() == 0)
        {
            compSeat.showError(0);
        }
        else if(compSeat.getSeatOccupied() == true)
        {
            compSeat.showError(2);
        }
        else
        {
           compSeat.occupySeat();
        } 
}
public void logOut()
{
   if(compSeat.showStation() == 0)
        {
            compSeat.showError(0);
        }

        else
        {
            compSeat.leaveSeat();
        }
}
}

监控班级

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Monitor extends JPanel{

private JLabel stationL, iDL, timeInL;
private JLabel[] stationA,idA,timeA;
private String str = "";


public Monitor()
{
    //SET UP PANEL 
    setPreferredSize(new Dimension(80,100));
    setBorder(BorderFactory.createLoweredBevelBorder()); 
    setBackground (Color.yellow); 
    setLayout(null);
    setLayout(null);


    stationL = new JLabel("Station #", SwingConstants.CENTER);
    iDL = new JLabel("Student Number");
    timeInL = new JLabel("Time In");

    stationL.setSize(100,20);
    iDL.setSize(100,20);
    timeInL.setSize(100,20);

    stationL.setLocation(280,60);
    iDL.setLocation(450,60);
    timeInL.setLocation(630,60);

    //ADD TO PANEL

    add(stationL);
    add(iDL);
    add(timeInL);

    //INSTANTIATION OF ARRAYS
    stationA = new JLabel[10];
    idA = new JLabel[10];
    timeA = new JLabel[10];

    displayFixedValues();
}

//METHOD THAT WILL DISPLAY THE FIRST VALUES OF THE MONITOR PANEL
public void displayFixedValues()
{

    int y = 85;
    for(int i=0 ; i<10 ; i++)
    {
        switch(i)
            {
                case 0: str = "1"; break;
                case 1: str = "2"; break;
                case 2: str = "3"; break;
                case 3: str = "4"; break;
                case 4: str = "5"; break;
                case 5: str = "6"; break;
                case 6: str = "7"; break;
                case 7: str = "8"; break;
                case 8: str = "9"; break;
                case 9: str = "10"; break;
            }
        stationA[i] = new JLabel(str, SwingConstants.CENTER);
        stationA[i].setSize(100,30);
        stationA[i].setLocation(280,y);          

        idA[i] = new JLabel("Vacant Station");
        idA[i].setSize(100,30);
        idA[i].setLocation(450,y);

        timeA[i] = new JLabel("00:00:00--");
        timeA[i].setSize(100,30);
        timeA[i].setLocation(630,y);
        y = y+30;

        add(stationA[i]);
        add(idA[i]);
        add(timeA[i]);
    }
}

//METHODS THAT WILL RETURN THE VALUE OF THE OBJECTS CREATED IN THIS CLASS
public JLabel[] showArrayStationVal()
{
    return stationA;
}
public JLabel[] showArrayIdVal()
{
    return idA;
}
public JLabel[] showArrayTimeVal()
{
    return timeA;
}
public JLabel showStationVal()
{
    return stationL;
}
public JLabel showIdVal()
{
    return iDL;
}
public JLabel showTimeVal()
{
    return timeInL;
}
}

MonitoringFrame类

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MonitoringFrame extends JFrame
{

private JPanel monitor, seats, student, time;

public MonitoringFrame()
{



    Monitor monitor = new Monitor();
    ComputerSeats seats = new ComputerSeats();
    Student student = new Student();

    Container pane = getContentPane();

    pane.add(monitor);
    pane.add(seats);
    pane.add(student);

    setVisible(true);
    setLayout(null);
    setSize(400,300);
    pack();


}

public static void main(String[] args)
{

    MonitoringFrame fr = new MonitoringFrame();

}
}

1 个答案:

答案 0 :(得分:1)

解释非常简单:

Student类有这个字段声明:

  private ComputerSeats compSeat = new ComputerSeats();

并且ComputerSeats类具有此字段声明:

  private Student stud = new Student();

因此,当您创建学生时,会通过创建compSeat来初始化ComputerSeatstud通过创建Student来初始化compSeatComputerSeat通过创建{{1}}来初始化{{1}} {{1}} ......依此类推,直到堆栈溢出。

这是一个递归循环。