我在实例化一个类本身后得到一个StackOverflowError

时间:2016-01-24 09:51:22

标签: java error-handling constructor stack-overflow instantiation

我在这节课的第12和第65行得到override func viewWillAppear(animated: Bool) { //begin ignoring events until the information is finished being pulled UIApplication.sharedApplication().beginIgnoringInteractionEvents() //run query let query = PFQuery(className: "Answers") query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in var localArray=[SomeType]() if let objects = objects { //append information to the localArray } } self.resultsArray=localArray self.tableView.reloadData() } } //information is now pulled, so allow interaction UIApplication.sharedApplication().endIgnoringInteractionEvents() }

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(); } } 时出现此错误:

  

线程中的异常&#34; main&#34; java.lang.StackOverflowError的       at sun.awt.Win32GraphicsConfig.getBounds(Native Method)       at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)       at java.awt.Window.init(Unknown Source)       在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)

为什么会这样?我能解决吗?

3 个答案:

答案 0 :(得分:1)

这一行:

private StudInfo studInfo = new StudInfo();

main调用:

StudSubj studSubj = new StudSubj();

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

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

如果StackOverflowError没有被抛出,这将会永远持续下去 您需要避免将类本身的对象创建为成员或字段。

答案 1 :(得分:0)

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

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

并在:

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

答案 2 :(得分:0)

正如其他人所说,你创建的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);
            }
        }   
    }
}

注意:我从main function课程中删除了StudSubj,因此您需要运行StudInfo才能使其正常工作

更改日志,对未明确更改道歉。

  • 现在每个类只有一个实例,当点击正确的按钮时,它们会相互切换。

  • 在每个班级中有两个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();
        }
    }
}