Java 关闭jframe,同时打开新的jframe

Java 关闭jframe,同时打开新的jframe,java,swing,event-handling,jframe,mouse-listeners,Java,Swing,Event Handling,Jframe,Mouse Listeners,我试图在关闭主框架时打开名为stage2的新框架。但是当我把main.setVisible(false)放在那里时,它说它不是一个封闭类,我把这个监听器放在大型机调用的jpanel类上。所以它看起来像这样 class main extends JFrame() { main() { } add(story2) } class story2 extends JPanel() { public void mouseClicked(MouseEvent e)

我试图在关闭主框架时打开名为stage2的新框架。但是当我把main.setVisible(false)放在那里时,它说它不是一个封闭类,我把这个监听器放在大型机调用的jpanel类上。所以它看起来像这样

class main extends JFrame()
{
   main()
     {
     }
   add(story2)
}

class story2 extends JPanel()
{
    public void mouseClicked(MouseEvent e)
            {

                 new stage2(); 
                 main.this.setVisible(false);
            }
}

这是因为
story2
确实不是
main
的内部类。您应该使用JComponent的来获取JFrame
story2
所在的句柄,然后对JFrame执行您想要的操作。大概是这样的:

((JFrame)this.getTopLevelAncestor()).dispose();
(如果不再需要
main
JFrame,最好使用而不仅仅是
setVisibke(false)
,以释放资源和内存。)

上面的代码示例只是一个演示。当然,在生产就绪的应用程序中,您应该首先检查顶级祖先是否可以转换为JFrame(或至少是Window)