Я получаю StackOverflowError
в строке 12 и 65 этого класса:я получаю StackOverflowError после того, как я создаю экземпляр класса внутри себя
package studInfoAndSubj; // Information Window
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class StudInfo extends JFrame
{
// This Class
private StudInfo studInfo = new StudInfo(); // this is Line 12
// Subjects Window Class
private StudSubj studSubj = new StudSubj();
// Labels
private JLabel nameL = new JLabel("Student Name: ", SwingConstants.CENTER);
private JLabel snameL = new JLabel("(Surname)", SwingConstants.CENTER);
private JLabel fnameL = new JLabel("(First Name)", SwingConstants.CENTER);
private JLabel mnameL = new JLabel("(Middle Name)", SwingConstants.CENTER);
private JLabel courseL = new JLabel("Course: ", SwingConstants.CENTER);
private JLabel yearL = new JLabel("Year: ", SwingConstants.CENTER);
private JLabel semesterL = new JLabel("Semester: ", SwingConstants.CENTER);
// Text Fields
private JTextField snameTF = new JTextField(10);
private JTextField fnameTF = new JTextField(10);
private JTextField mnameTF = new JTextField(10);
// Text Value Handlers
private String snameS, fnameS, mnameS, courseS, yearS, semesterS;
// Buttons
private JButton nextB = new JButton("Next");
private JButton cancelB = new JButton("Cancel");
private NextButtonHandler nextBH = new NextButtonHandler();
private CancelButtonHandler cancelBH = new CancelButtonHandler();
// Layouts ((components + rows - 1)/rows)
private Container pane = getContentPane();
private Container one = new JPanel(new GridLayout(0, 6));
// Combo Boxes
private String[] course = {"BSIT"};
private String[] year = {"I"};
private String[] semester = {"1ST", "2ND"};
private JComboBox<String> courseCB = new JComboBox<>(course);
private JComboBox<String> yearCB = new JComboBox<>(year);
private JComboBox<String> semesterCB = new JComboBox<>(semester);
// Spaces
private JLabel blank1 = new JLabel("");
private JLabel blank2 = new JLabel("");
private JLabel blank3 = new JLabel("");
private JLabel blank4 = new JLabel("");
private JLabel blank5 = new JLabel("");
private JLabel blank6 = new JLabel("");
private JLabel blank7 = new JLabel("");
// Window Size
private static final int WIDTH = 1000;
private static final int HEIGHT = 250;
public StudInfo() // and this is line 65
{
DefaultListCellRenderer dlcr1 = new DefaultListCellRenderer();
dlcr1.setHorizontalAlignment(DefaultListCellRenderer.CENTER);
courseCB.setRenderer(dlcr1);
yearCB.setRenderer(dlcr1);
semesterCB.setRenderer(dlcr1);
snameTF.setHorizontalAlignment(JTextField.CENTER);
fnameTF.setHorizontalAlignment(JTextField.CENTER);
mnameTF.setHorizontalAlignment(JTextField.CENTER);
snameL.setVerticalAlignment(SwingConstants.TOP);
fnameL.setVerticalAlignment(SwingConstants.TOP);
mnameL.setVerticalAlignment(SwingConstants.TOP);
nextB.addActionListener(nextBH);
cancelB.addActionListener(cancelBH);
Border border1 = BorderFactory.createLineBorder(Color.BLUE, 1);
courseL.setBorder(border1);
yearL.setBorder(border1);
semesterL.setBorder(border1);
pane.add(one);
one.add(blank1);
one.add(nameL);
one.add(snameTF);
one.add(fnameTF);
one.add(mnameTF);
one.add(blank2);
one.add(blank3);
one.add(blank4);
one.add(snameL);
one.add(fnameL);
one.add(mnameL);
one.add(blank5);
one.add(courseL);
one.add(courseCB);
one.add(yearL);
one.add(yearCB);
one.add(semesterL);
one.add(semesterCB);
one.add(blank6);
one.add(blank7);
one.add(cancelB);
one.add(nextB);
setTitle("Student Information");
setSize(WIDTH, HEIGHT);
setLocationRelativeTo(null);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public String getSemValue()
{
return semesterS;
}
public String[] getSemCBValue()
{
return semester;
}
private class NextButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
snameS = snameTF.getText();
fnameS = fnameTF.getText();
mnameS = mnameTF.getText();
courseS = courseCB.getSelectedItem().toString();
yearS = yearCB.getSelectedItem().toString();
semesterS = semesterCB.getSelectedItem().toString();
studInfo.setVisible(false);
studSubj.setVisible(true);
}
}
private class CancelButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
}
public static void main(String[] args)
{
StudInfo studInfo = new StudInfo();
}
}
И это мой другой класс:
package studInfoAndSubj; // Subjects Window
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
public class StudSubj extends JFrame
{
// This class
private StudSubj studSubj = new StudSubj();
// Information Window Class
private StudInfo studInfo = new StudInfo();
// Labels
private JLabel addSubjL = new JLabel("Add Subject: ", SwingConstants.CENTER);
// Buttons
private JButton doneB = new JButton("Done");
private JButton backB = new JButton("Back");
private DoneButtonHandler doneBH = new DoneButtonHandler();
private BackButtonHandler backBH = new BackButtonHandler();
// Text Value Handlers
private String semesterS = studInfo.getSemValue();
private String[] semester = studInfo.getSemCBValue();
private int selectedSubj;
private String selectedSubjTime;
// Subject Lists
private String[] sem1Subj = {"College Algebra\nMWF\n12:00PM-1:00PM",
"Communication Arts 1\nMWF\n9:00AM-10:00AM",
"Information Technology Fundamentals - Lec\nTTH\n7:30AM-8:30AM",
"Information Technology Fundamentals - Lab\nT\n9:00AM-12:00PM",
"Programming 1\nMWF\n7:00AM-9:00AM"};
private String[] sem1AddSubj = {"", "Filipino Christian Living\nMWF\n7:00AM-9:00AM",
"Foundation of Physical Education\nTH\n10:00AM-12:00PM",
"Komunikasyon sa Akademikong Filipino\nMWF\n9:00AM-10:00AM"};
private String[] sem2Subj = {"Trigonometry\nMWF\n7:00AM-8:00AM",
"Communication Arts 2\nTTH\n9:00AM-10:30AM",
"Programming 2\nMWF\n9:00AM-11:00AM",
"Database Management Systems\nMWF\n8:00AM-9:00AM",
"Network Management\nTTH\n7:30AM-9:00AM"};
private String[] sem2AddSubj = {"", "Environmental Science\nMWF\n8:00AM-9:00AM",
"Social Dances\nM\n12:00PM-2:00PM",
"General Psychology\nT\n12:00PM-1:00PM"};
// Subject Time
private String[] sem1SubjTime = {"MWF12:00PM-1:00PM", "MWF9:00AM-10:00AM", "TTH7:30AM-8:30AM",
"T9:00AM-12:00PM", "MWF7:00AM-9:00AM"};
private String[] sem1AddSubjTime = {"", "MWF7:00AM-9:00AM", "TH10:00AM-12:00PM", "MWF9:00AM-10:00AM"};
private String[] sem2SubjTime = {"MWF7:00AM-8:00AM", "TTH9:00AM-10:30AM", "MWF9:00AM-11:00AM",
"MWF8:00AM-9:00AM", "TTH7:30AM-9:00AM"};
private String[] sem2AddSubjTime = {"", "MWF8:00AM-9:00AM", "M12:00PM-2:00PM", "T12:00PM-1:00PM"};
// Layouts ((components + rows - 1)/rows)
private Container pane = getContentPane();
private Container two = new JPanel(new GridLayout(0, 2));
// Combo Boxes
private JComboBox<String> sem1AddSubjCB = new JComboBox<>(sem1AddSubj);
private JComboBox<String> sem2AddSubjCB = new JComboBox<>(sem2AddSubj);
// Window Size
private static final int WIDTH = 1000;
private static final int HEIGHT = 250;
public StudSubj()
{
DefaultListCellRenderer dlcr2 = new DefaultListCellRenderer();
dlcr2.setHorizontalAlignment(DefaultListCellRenderer.CENTER);
sem1AddSubjCB.setRenderer(dlcr2);
sem2AddSubjCB.setRenderer(dlcr2);
doneB.addActionListener(doneBH);
backB.addActionListener(backBH);
// 1st Semester Subjects
JLabel sem1Subj1 = new JLabel(sem1Subj[0]);
JLabel sem1Subj2 = new JLabel(sem1Subj[1]);
JLabel sem1Subj3 = new JLabel(sem1Subj[2]);
JLabel sem1Subj4 = new JLabel(sem1Subj[3]);
JLabel sem1Subj5 = new JLabel(sem1Subj[4]);
// 2nd Semester Subjects
JLabel sem2Subj1 = new JLabel(sem2Subj[0]);
JLabel sem2Subj2 = new JLabel(sem2Subj[1]);
JLabel sem2Subj3 = new JLabel(sem2Subj[2]);
JLabel sem2Subj4 = new JLabel(sem2Subj[3]);
JLabel sem2Subj5 = new JLabel(sem2Subj[4]);
Border border2 = BorderFactory.createLineBorder(Color.BLUE, 1);
sem1Subj1.setBorder(border2); sem2Subj1.setBorder(border2);
sem1Subj2.setBorder(border2); sem2Subj2.setBorder(border2);
sem1Subj3.setBorder(border2); sem2Subj3.setBorder(border2);
sem1Subj4.setBorder(border2); sem2Subj4.setBorder(border2);
sem1Subj5.setBorder(border2); sem2Subj5.setBorder(border2);
addSubjL.setBorder(border2);
pane.add(two);
if(semesterS.equals(semester[0]))
{
setTitle("(BSIT - I - 1st Semester) List Of Subjects");
two.add(sem1Subj1);
two.add(sem1Subj2);
two.add(sem1Subj3);
two.add(sem1Subj4);
two.add(sem1Subj5);
two.add(addSubjL);
two.add(sem1AddSubjCB);
}else if(semesterS.equals(semester[1]))
{
setTitle("(BSIT - I - 2nd Semester) List Of Subjects");
two.add(sem2Subj1);
two.add(sem2Subj2);
two.add(sem2Subj3);
two.add(sem2Subj4);
two.add(sem2Subj5);
two.add(addSubjL);
two.add(sem2AddSubjCB);
}
two.add(backB);
two.add(doneB);
setSize(WIDTH, HEIGHT);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private class DoneButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int ctr;
if(semesterS.equals(semester[0]))
{
selectedSubj = sem1AddSubjCB.getSelectedIndex();
selectedSubjTime = sem1AddSubj[selectedSubj];
for(ctr = 0; ctr <= sem1AddSubj.length; ctr++)
{
if(selectedSubjTime.equals(sem1AddSubjTime[ctr]))
{
JOptionPane.showMessageDialog(null, "Choosen Subject has same time with the others!", "Error", 0);
}else{
sem1AddSubjCB.getSelectedItem();
}
}
}else if(semesterS.equals(semester[1]))
{
selectedSubj = sem2AddSubjCB.getSelectedIndex();
selectedSubjTime = sem2AddSubj[selectedSubj];
for(ctr = 0; ctr <= sem1AddSubj.length; ctr++)
{
if(selectedSubjTime.equals(sem2AddSubjTime[ctr]))
{
JOptionPane.showMessageDialog(null, "Choosen Subject has same time with the others!", "Error", 0);
}else{
sem2AddSubjCB.getSelectedItem();
}
}
}
}
}
private class BackButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
studSubj.setVisible(false);
studInfo.setVisible(true);
}
}
public static void main(String[] args)
{
StudSubj studSubj = new StudSubj();
}
}
Это когда я бегу main
ошибка появляется:
исключение в потоке "главный" java.lang.StackOverflowError at sun.awt.Win32GraphicsConfig.getBounds (собственный метод) at sun.awt.Win32GraphicsConfig.getBounds (Неизвестный источник) at java.awt.Window.init (Неизвестный источник) at java.awt.Window. (Неизвестный источник) на java.awt.Frame. (Неизвестный источник) на java.awt.Frame. (Неизвестный источник) на javax.swing.JFrame. (Неизвестный источник) на studInfoAndSubj.StudInfo. (StudInfo.java:65) на studInfoAndSubj.StudInfo (StudInfo.java:12) на studInfoAndSubj.StudInfo (StudInfo.java:12) на studInfoAndSubj.StudInfo (StudInfo.java:12) на studInfoAndSubj.StudInfo (StudInfo.java....: 12) на studInfoAndSubj.StudInfo. (StudInfo.java:12) на studInfoAndSubj.StudInfo. (StudInfo.java:12) на studInfoAndSubj.StudInfo. (StudInfo.java:12)
Почему это происходит? Могу ли я это исправить?
'частных статических StudInfo studInfo = новый StudInfo();'? – saka1029
@ saka1029 Я попробовал, чтобы ошибка StackOverFlow была решена, но теперь она говорит, что произошла ошибка Java, ExceptionInitializerError и исключение NullPointerException – Roi