1

Я получаю 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)

Почему это происходит? Могу ли я это исправить?

+0

'частных статических StudInfo studInfo = новый StudInfo();'? – saka1029

+0

@ saka1029 Я попробовал, чтобы ошибка StackOverFlow была решена, но теперь она говорит, что произошла ошибка Java, ExceptionInitializerError и исключение NullPointerException – Roi

ответ

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, чтобы заставить его работать

Changelog, извинений для того, чтобы сделать изменения ясными.

  • В настоящее время существует только один экземпляр каждого класса, и они переключаются между собой, когда нажимаются правильные кнопки.

  • В каждом классе было два Action Listeners тогда как теперь есть только один, который идентифицирует, который JButton уволил Action Event, а затем вытекает из кода соответственно. Это делается с помощью e.getSource().

  • создал новую функцию, build() так, что при nextB нажатии она принимает последние значения, выбранные в JComboBoxes

  • Слегка изменены массивы sem1AddSubjTime и sem2AddSubjTime и изменил

Оригинал

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

Вы оставили некоторые функции в своем коде ... Было бы хорошо, если бы вы точно объяснили *, что * вы изменили и * почему * вы его изменили. – Idos

+0

Я уточню свой ответ, но какую функциональность я не оставил? – Dan

+0

Может быть, я просто выгляжу небрежно, но кажется, что BackButtonHandler отсутствует ... Я не уверен, что еще, но трудно сказать, потому что они такие большие кусочки кода. – Idos

0

Ваш вопрос состоит пытается, например в StudInfo класс два раза:

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

А в:

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

Эта линия:

private StudInfo studInfo = new StudInfo(); 

, который вызывается из main:

StudSubj studSubj = new StudSubj(); 

Создает новый объект StudInfo, в котором есть поле того же типа.

Если создается первый экземпляр StudInfo, то создается также экземпляр другой. Это один также имеет поле, которое инстанцирует еще одинStudInfo, и так далее ...

Это будет идти вечно, если StackOverflowError не был брошен.
Вам нужно избегать создания объекта самого класса в качестве члена или поля.