我在内部实例化一个 class 后得到 StackOverflowError

I get a StackOverflowError after I instantiate a class inside itself

我在这个 class 的第 12 行和第 65 行得到一个 WhosebugError

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();
}

}

这是我的另一个 class:

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:

时出现此错误

Exception in thread "main" java.lang.WhosebugError at sun.awt.Win32GraphicsConfig.getBounds(Native Method) at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source) at java.awt.Window.init(Unknown Source) at java.awt.Window.(Unknown Source) at java.awt.Frame.(Unknown Source) at java.awt.Frame.(Unknown Source) at javax.swing.JFrame.(Unknown Source) at studInfoAndSubj.StudInfo.(StudInfo.java:65) at studInfoAndSubj.StudInfo.(StudInfo.java:12) at studInfoAndSubj.StudInfo.(StudInfo.java:12) at studInfoAndSubj.StudInfo.(StudInfo.java:12) at studInfoAndSubj.StudInfo.(StudInfo.java:12) at studInfoAndSubj.StudInfo.(StudInfo.java:12) at studInfoAndSubj.StudInfo.(StudInfo.java:12) at studInfoAndSubj.StudInfo.(StudInfo.java:12)

为什么会这样?我可以修复它吗?

您的问题包括尝试在 StudInfo class 中实例化两次:

    private StudInfo studInfo = new StudInfo(); // this is Line 12

并在:

   public static void main(String[] args) 
   {
    StudInfo studInfo = new StudInfo();
   }

这一行:

private StudInfo studInfo = new StudInfo();

调用自 main:

StudSubj studSubj = new StudSubj();

创建一个新的 StudInfo 对象,该对象具有相同类型的字段。

创建 StudInfo 的第一个实例时,也会实例化 other 的实例。那个 有一个实例化 另一个 StudInfo 的字段,依此类推...

如果不抛出 WhosebugError,这将永远持续下去。
您需要避免创建 class 本身的对象作为成员或字段。

正如其他人所说,您创建了太多 StudInfo 的实例,但即使修复了该问题,您也会遇到更多异常。要解决您的问题,请参阅修改后的代码。

StudInfo.java

package studInfoAndSubj;

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


public class StudInfo extends JFrame {

    private StudSubj sJ;

    // 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 ButtonHandler bH = new ButtonHandler();

    // 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(bH);
        cancelB.addActionListener(bH);

        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);
        sJ = new StudSubj(this);
    }

    public String getSemValue()
    {
        return semesterS;
    }

    public String[] getSemCBValue()
    {
        return semester;
    }

    private class ButtonHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if(e.getSource() == nextB) {
                snameS = snameTF.getText();
                fnameS = fnameTF.getText();
                mnameS = mnameTF.getText();
                courseS = courseCB.getSelectedItem().toString();
                yearS = yearCB.getSelectedItem().toString();
                semesterS = semesterCB.getSelectedItem().toString();


                setVisible(false);
                sJ.build();
            } else if(e.getSource() == cancelB) {
                System.exit(0);
            }
        }
    }

    public static void main(String[] args) 
    {
        StudInfo studInfo = new StudInfo();
    }
}

StudSubj.java

package studInfoAndSubj;

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


public class StudSubj extends JFrame {

    private StudInfo sI;

    // Labels
    private JLabel addSubjL = new JLabel("Add Subject: ", SwingConstants.CENTER);

    // Buttons
    private JButton doneB = new JButton("Done");
    private JButton backB = new JButton("Back");
    private ButtonHandler bH = new ButtonHandler();

    // Text Value Handlers
    private String semesterS;
    private String[] semester;
    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;

    private JLabel sem1Subj1 = new JLabel(sem1Subj[0]);
    private JLabel sem1Subj2 = new JLabel(sem1Subj[1]);
    private JLabel sem1Subj3 = new JLabel(sem1Subj[2]);
    private JLabel sem1Subj4 = new JLabel(sem1Subj[3]);
    private JLabel sem1Subj5 = new JLabel(sem1Subj[4]);

    // 2nd Semester Subjects
    private JLabel sem2Subj1 = new JLabel(sem2Subj[0]);
    private JLabel sem2Subj2 = new JLabel(sem2Subj[1]);
    private JLabel sem2Subj3 = new JLabel(sem2Subj[2]);
    private JLabel sem2Subj4 = new JLabel(sem2Subj[3]);
    private JLabel sem2Subj5 = new JLabel(sem2Subj[4]);

    public StudSubj(StudInfo sI) 
    {
        this.sI = sI;

        DefaultListCellRenderer dlcr2 = new DefaultListCellRenderer(); 
        doneB.addActionListener(bH);
        backB.addActionListener(bH);
        dlcr2.setHorizontalAlignment(DefaultListCellRenderer.CENTER); 
        sem1AddSubjCB.setRenderer(dlcr2);
        sem2AddSubjCB.setRenderer(dlcr2);

        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        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);
    }

    public void build() {
        pane.add(two);

        semesterS = sI.getSemValue();
        semester = sI.getSemCBValue();

        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);

        repaint();
        revalidate();

        setSize(WIDTH, HEIGHT);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private class ButtonHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if(e.getSource() == doneB) {
                int ctr;

                if(semesterS.equals(semester[0]))
                {
                    selectedSubj = sem1AddSubjCB.getSelectedIndex()-1;
                    selectedSubjTime = sem1AddSubjTime[selectedSubj];

                    for(ctr = 0; ctr < sem1SubjTime.length; ctr++)
                    {
                        if(selectedSubjTime.equals(sem1SubjTime[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()-1;
                    selectedSubjTime = sem2AddSubjTime[selectedSubj];

                    for(ctr = 0; ctr < sem2SubjTime.length; ctr++)
                    {

                        if(selectedSubjTime.equals(sem2SubjTime[ctr]))
                        {
                            JOptionPane.showMessageDialog(null, "Choosen Subject has same time with the others!", "Error", 0);
                        } else {
                            sem2AddSubjCB.getSelectedItem();
                        }
                    }
                }
            } else if(e.getSource() == backB) {
                setVisible(false);
                sI.setVisible(true);
            }
        }   
    }
}

注意:我从 StudSubj class 中删除了 main function 所以你需要 运行 StudInfo 才能让它工作

变更日志,很抱歉没有明确说明变更。

  • 现在每个 class 只有一个实例,当单击正确的按钮时它们会在彼此之间切换。

  • 在每个 class 中有两个 Action Listeners 而现在只有一个可以识别哪个 JButton 触发了 Action Event 然后跟随相应的代码。这是通过 e.getSource().

  • 完成的
  • 创建了一个新函数 build() 以便在单击 nextB 时它采用在 JComboBoxes

  • 稍微修改了数组sem1AddSubjTimesem2AddSubjTime并更改了

原创

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();

        }
    }

}

已修改

int ctr;

if(semesterS.equals(semester[0]))
{
    selectedSubj = sem1AddSubjCB.getSelectedIndex()-1;
    selectedSubjTime = sem1AddSubjTime[selectedSubj];

    for(ctr = 0; ctr < sem1SubjTime.length; ctr++)
    {
        if(selectedSubjTime.equals(sem1SubjTime[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()-1;
    selectedSubjTime = sem2AddSubjTime[selectedSubj];

    for(ctr = 0; ctr < sem2SubjTime.length; ctr++)
    {

        if(selectedSubjTime.equals(sem2SubjTime[ctr]))
        {
            JOptionPane.showMessageDialog(null, "Choosen Subject has same time with the others!", "Error", 0);
        } else {
            sem2AddSubjCB.getSelectedItem();
        }
    }
}