Java 如何使Listener关系不递归

Java 如何使Listener关系不递归,java,swing,awt,Java,Swing,Awt,我把代码分解成理论问题的基础 public class main { public static void main(String[] args) { new Object1().a(); } } public class Object1 { private static Object2 object2; public Object1() { } public void a(){ object2

我把代码分解成理论问题的基础

public class main {

    public static void main(String[] args) {    
        new Object1().a();
    }
}

public class Object1 {

    private static Object2 object2;

    public Object1() {

    }

    public void a(){

        object2 = new Object2(this);
        object2.setVisible(true);
        System.out.println("new object2 created");

    }

    public void b(){

        object2 = null;
        System.out.println("set object2 to null");
        a();

    }
}

/**
 *
 *Class creates JFrame with a button.
 *the button has an event listener which calls method b form object1
 *
 */

public class Object2 extends javax.swing.JFrame {

    private JButton jButton1;
    private Object1 object1;

    public Object2(Object1 ob1) {

        super();
        this.object1 = ob1;
        initGUI();

    }

    private void initGUI() {
        try {
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            {
                jButton1 = new JButton();
                getContentPane().add(jButton1, BorderLayout.CENTER);
                jButton1.setText("click me");
                jButton1.setPreferredSize(new java.awt.Dimension(311, 143));
                jButton1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent evt) {

                        jButton1ActionPerformed(evt);
                    }
                });
            }
            pack();
            this.setSize(150, 125);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jButton1ActionPerformed(ActionEvent evt) {

        System.out.println("button clicked");

        object1.b();

    }
我的jFrame的调用很可能是一个递归,其结果是将Frame设置为null不会起任何作用。。。 框架仍然可见,并且在不引发NullPointerException的情况下工作。 但这不是问题的核心

问题是:
如何在没有递归的情况下为其编写等价的代码?

是否
JFrame
未居中?这就是问题所在。或者你有一些设计问题

object2.setLocationRelativeTo(null);
它将使
JFrame

否则,如果出现设计问题,请使用其中任何一个设置器。。差不多

public class Object2 extends javax.swing.JFrame {

    private JButton jButton1;
    private Object1 object1;

    public Object2(Object1 ob1) {

        super();
        initGUI();

    }

    public void setObject1(Object1 object1){
        this.object1 = object1;
    }

........

Object1

中创建object2对象后调用setter。问题不是设计问题或类似问题,问题是,如果按下按钮,它会跟随Object1的递归调用,object2不会被销毁。相反,我有两个等效的工作对象2'sobject2=null。你想做什么?您的意思是关闭JFrame?然后执行object2.setVisible(false)或object2.dispose();我想在按下按钮后将object2从RAM中释放出来,但设置为null不起作用,因为它的递归和object2仍然是堆栈的一部分如果我理解正确:您想销毁当前帧并创建并显示新帧,对吗?如果是,为什么不调用
object2.dispose()?-那就行了。