使用 class 实例的 stackoverflow 错误

stackoverflow error using instance of class

所以我在处理工资单申请时 运行 遇到了问题。每次我去 运行 它时,它都会出现一个 Whosebug 错误。我似乎无法找出错误。我已经在这个问题上停留了一段时间,但我们将不胜感激任何帮助。我在 assign bonus 上注释掉了 mainform 变量,它似乎有效,但我需要该变量才能返回到其他形式。

Exception in thread "main" java.lang.WhosebugError
    at sun.awt.CGraphicsConfig.nativeGetBounds(Native Method)
    at sun.awt.CGraphicsConfig.getBounds(CGraphicsConfig.java:56)
    at java.awt.Window.init(Window.java:505)
    at java.awt.Window.<init>(Window.java:537)
    at java.awt.Frame.<init>(Frame.java:420)
    at java.awt.Frame.<init>(Frame.java:385)
    at javax.swing.JFrame.<init>(JFrame.java:189)
    at oca.project.MainForm.<init>(MainForm.java:91)
    at oca.project.AssignBonusForm.<init>(AssignBonusForm.java:80)
    at oca.project.MainForm.<init>(MainForm.java:22)

主要class

package oca.project;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class OCAProject {

 static ArrayList<Person> persons = new ArrayList<>();

    public static void main(String[] args) {

         CEO JamesMint = new CEO();
        //making objects 
 AdministrationManager BillJohns = new AdministrationManager(JamesMint);
FinancialAdministrator EricWhite = new FinancialAdministrator(JamesMint);
 persons.add(JamesMint);
 persons.add(BillJohns);
persons.add(EricWhite);

 //declaring form and passing arraylist as parameter
        MainForm frame = new MainForm(persons);
        frame.setVisible(true); 
    }
}

大型机class

package oca.project;
import java.util.ArrayList;

public class MainForm extends javax.swing.JFrame {
  //array list to hold the report items
    private ArrayList<PayrollReportItem> payRolllist = new ArrayList<>();

  AssignBonusForm assignFrame = new AssignBonusForm(payRolllist);
void setList(ArrayList<Person> persons) {
//sets arraylist

      assignFrame.setPersons(persons);


   }
 public MainForm(ArrayList<Person> persons) {
           initComponents();
        setList(persons);
       }

 private void btnAssignBonusActionPerformed(java.awt.event.ActionEvent evt) {                                               

//to open assign bonus form
      assignFrame.setVisible(true);
        this.dispose();


    }   

分配奖金表格

package oca.project;

import java.util.ArrayList;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;


/**
 *
 * Form that allows managers assign bonuses to their subordinates 
 */
public class AssignBonusForm extends javax.swing.JFrame  {

 static ArrayList<Person> persons = new ArrayList<>();

  /**
     * Creates new form AssignBonusForm
     * @param payRolllist
     */


    public AssignBonusForm(ArrayList<PayrollReportItem> payRolllist) {
        initComponents();


      System.out.println(persons);
    } 

    private AssignBonusForm() {


    }

    public void setPersons(ArrayList<Person> persons) {
    AssignBonusForm.persons = persons;
    }

    public ArrayList<Person> getPersons() {
        return persons;
    }

MainForm form = new MainForm(persons);

   private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {                                        

        form.setVisible(true);

        this.dispose();
    }                                       

很难说格式不好,但是,这对你来说不觉得有点奇怪吗?

public class MainForm
    ...
    AssignBonusForm assignFrame = new AssignBonusForm(payRolllist);

public class AssignBonusForm
    ...
    MainForm form = new MainForm(persons);

当你创建一个新的 MainForm 时,你认为会发生什么?一个新的 MainForm 会创建一个新的 AssignBonusForm 会创建一个新的 MainForm 会创建一个新的 AssignBonusForm 会创建一个新的 MainForm 会创建一个新的 ...

您可以在堆栈跟踪中看到这一点:

...    
at oca.project.MainForm.<init>(MainForm.java:91)
at oca.project.AssignBonusForm.<init>(AssignBonusForm.java:80)
at oca.project.MainForm.<init>(MainForm.java:22)

为什么 MainForm 在那里两次?