frame setVisible(false)和dispose()无法杀死进程

时间:2013-02-07 11:28:42

标签: java swing jframe

我有以下场景(2个班级)

第1帧(下一个按钮)
第2帧(上一步按钮,关闭按钮)
Frame1打开(实例1)
去Frame1 - Frame2(frame1.setVisible(false)frame2.setVisible(true))(实例2)
去Frame2 - Frame1(frame2.setVisible(false)frame1.setVisible(true))(实例3)
再次Frame1 - Frame2(frame1.setVisible(false)frame2.setVisible(true))(实例4)

在上面的过程中4个实例(如果程序打开然后记为实例)
现在在从Frame2关闭时,我使用frame1.dispose()frame2.dispose()
这里只处理了2次实例 但问题是:仍然没有处理2个实例 但只有一个过程是活着的。怎么可能?
在上面的场景中,我应该处置所有实例来杀死进程吗?

2 个答案:

答案 0 :(得分:1)

如果您不想使用CardLayout

,请考虑这样做

Frame1中创建一个构造函数,其参数为Frame2,如下所示,并在本地存储frame2对象。

public class Frame1{
    private Frame2 frame2Obj;
    public Frame1(Frame2 frame1Obj){
        this.frame2Obj = frame2Obj;
    }
    private openFrame1(){
         frame2Obj.setVisible(true);
         this.setVisible(false);
    }
}

同样在Frame2中创建一个构造函数,其参数为Frame1,如下所示,并在本地存储frame1对象。

public class Frame2{
    private Frame1 frame1Obj;
    public Frame2(Frame1 frame1Obj){
        this.frame1Obj = frame1Obj;
    }
    private openFrame1(){
         frame1Obj.setVisible(true);
         this.setVisible(false);
    }
}

现在你只有两个实例。

答案 1 :(得分:1)