我创建了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();
}
}
答案 0 :(得分:1)
解释非常简单:
Student类有这个字段声明:
private ComputerSeats compSeat = new ComputerSeats();
并且ComputerSeats类具有此字段声明:
private Student stud = new Student();
因此,当您创建学生时,会通过创建compSeat
来初始化ComputerSeat
,stud
通过创建Student
来初始化compSeat
,ComputerSeat
通过创建{{1}}来初始化{{1}} {{1}} ......依此类推,直到堆栈溢出。
这是一个递归循环。