当前位置: 首页 > 知识库问答 >
问题:

两个类具有彼此的实例,给出堆栈溢出流错误[重复]

何麻雀
2023-03-14

有两个类:计算器和MenubarListener。Calculator类有一个MenubarListener实例,现在在MenubarListener类中,我需要访问Calculator类的两个方法并调用它们。但当我在MenubarListener中创建计算器实例时,编译器会显示堆栈溢出错误。显然,这是一个循环。我也不想让这些方法是静态的,否则会产生其他问题
如何通过第二个类访问这两种方法?

计算器类:

public class Calculator{

    MenuBarListener menubarListener = new menubarListener(a,b,c);
            .
            .
            .
    public void method1{
     //do something     
    }
    public void method2{
     //do something 
    }
 }

MenubarListener类:

public class MenubarListener {

//when I make an instance of calculator class compiler shows stackoverflow error.
Calculator calculator = new Calculator;

int a, b,c;
MenubarListener (int a ,int b,int c ){
this.a = a ;
...   }

    @Override
    public void actionPerformed(ActionEvent e) {

    if (e.getSource() == helpItem) {
    //I want to access these methods from Calculator class but it generates
       calculator.method1();
     }
   }
 }

共有1个答案

楚健
2023-03-14

您不应该在MenubarListener内部创建Calculator的新实例,只需通过构造函数/设置器将引用传递给计算器

public class Calculator{

    MenuBarListener menubarListener = new MenuBarListener(this, 10, 20, 30);
//...
}
public class MenuBarListener {

    final Calculator calculator;

    int a, b, c;

    MenuBarListener (Calculator calc, int a, int b, int c) {
        this.calculator = calc;
        this.a = a;
        this.b = b;
        this.c = c;
    }
 类似资料:
  • 问题内容: 下面给出的代码显示了运行时的Stackoverflow错误。但是,如果我使另一个类CarChange创建Car的对象,它将成功运行。我是一个初学者,请执行以下代码以了解在Java中进行向上转换的重要性。 问题答案: 一个stackoverflow通常意味着您有一个无限循环。 收到此消息的原因是因为您从testdrive方法调用驱动器,并且在该方法中再次调用drive。

  • 我有一个类 Delete 我想使用 Gson 库将其转换为 json,但是当我转换它时,它会抛出 这是我的类 这里是枚举类DeleteStatus.scala 删除原因.scala 以下是我如何在Json转换 但它抛出以下异常 请帮助其中的错误

  • 我有一个名为User的实体,它有一组角色。我还有一个角色实体,它有一组用户。(这只是出于学习目的的实践应用。) 问题是——我有一个UserController(REST API)来发送用户列表——这会导致StackOverFlow错误。用户试图加载角色,而角色又试图加载用户等。 我的问题是——如何避免这种情况?我也看到许多类似的设计。例如:https://viralpatel.net/blogs/

  • 我有一个执行快速排序的应用程序。在我开始给它一些更大的数字(我第一次得到它是10000000)之前,它工作得很好。我知道是由递归引起的,但我不明白为什么我的应用程序会因此而崩溃。如有任何建议,将不胜感激。这是我的密码:

  • 我有一个文件解析器代码,偶尔会在m.matches()上出现堆栈溢出错误(其中m是匹配器)。 我再次运行我的应用程序,它解析相同的文件,没有堆栈溢出。 我的模式确实有点复杂。它基本上是一组可选的零长度正lookahead,其中包含命名组,这样我就可以匹配一组变量名/值对,而不考虑它们的顺序。但我认为,如果某个字符串会导致堆栈溢出错误,它总是会导致它。。。不只是有时候。。。有什么想法吗? 我的模式

  • 问题内容: 下面的代码在执行时会产生堆栈溢出错误。但是,如果删除其中一个 它运行时没有堆栈溢出错误。如果我有以上两行,而类中只有其中一行,则没有错误,怎么会出现堆栈溢出错误呢? 问题答案: 两者都需要生成一个。当包含此行时: 首次访问该类时,将创建的实例。 不包括此行: 一切都很好。但是这条线很关键。每次创建的实例时,它都会尝试初始化其成员变量-另一个对象。然后, 该 实例将 其 初始化为另一个对