调用其他类方法出现循环/Null错误 两类互相调用引发逻辑循环问题
问题根因
你遇到的循环报错是两个类互相主动实例化对方导致的:Home类初始化时会创建Shop实例,若Shop类内部又直接新建Home实例,就会触发无限循环的实例化流程,最终出现栈溢出或初始化异常。
解决方案
通过构造函数注入已有实例的方式实现互相调用,不要各自新建对方的实例:
1 改造Shop类,新增接收Home实例的构造方法
public class Shop { // 持有外部传入的Home实例,不要自己new Home private Home home_class; // 改造构造方法,接收已存在的Home实例 public Shop(Home home) { this.home_class = home; // 以下保留你原有Shop类的初始化逻辑 JButton[] buttons = new JButton[你需要的按钮数量]; // 按钮添加到面板等原有逻辑 buttons[0].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println(stbl + act + "zurück button"); setVisible(false); home_class.home_open(); } }); } // 其余Shop类原有逻辑 }
2 改造Home类中Shop实例的初始化逻辑
public class Home { // 初始化Shop时传入当前Home实例(this),不要直接new Shop() Shop shop_class = new Shop(this); JButton[] buttons = new JButton[4]; //BUTTONS GET ADDET TO A PANEL THAT IS ON A FRAME buttons[2].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println(stbl + act + "shop button"); shop_class.setVisible(true); home_close(); } }); private void home_close() { for (int i = 0; i < buttons.length; i++) { buttons[i].setEnabled(false); } } public void home_open() { for (int i = 0; i < buttons.length; i++) buttons[i].setEnabled(true); } }
注意事项
不要在Shop的构造方法中调用Home还未初始化完成的成员,避免空指针异常。
内容的提问来源于stack exchange,提问作者user17362691
相关产品推荐
相关产品推荐

