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()代码>?-那就行了。