0

我正在使用 NetBeans。我JFrame的默认关闭操作为:EXIT_ON_CLOSE. 我有一个应该关闭程序的按钮JFrame,这是执行代码的操作:

private void bSalirActionPerformed(java.awt.event.ActionEvent evt){                                       
    this.dispose();
}  

我以为这会关闭程序的所有JFrames 但它没有,你能解释一下为什么或如何解决它吗?

4

5 回答 5

2

假设您调用了 JFrame框架,如下所示:

JFrame frame = new JFrame();

您可以通过调用关闭它

frame.dispose();

此外,调用 this.dispose() 指的是您在类中定义的 dispose() 方法。这可能是它不起作用的原因。你的类中有一个叫做 dispose 的方法吗?如果是这样,这种方法究竟是做什么的?

于 2013-10-29T22:36:46.270 回答
2

frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE)构建框架时调用。在该方法中,只要没有其他非守护线程在运行actionPerformed,调用& JVM 就应该结束。frame.dispose()

DISPOSE_ON_CLOSE可以在一个简短的演示中看到。关于这个答案

..我认为这会关闭所有的jFrames ..

应该只有一个(尽管上面的屏幕截图是人为的情况)。请参阅使用多个 JFrame,好/坏做法? 上述演示将在第 3 帧关闭后关闭。

于 2013-10-29T22:43:12.783 回答
2

EXIT_ON_CLOSE

当您单击框架右上角的“X”按钮时会发生这种情况。

您的 ActionListener 正在当前帧上调用 dispose() 。如果这是唯一打开的框架,那么应用程序也会关闭,但 dispose 方法不会关闭所有打开的框架/对话框。

查看关闭应用程序ExitAction如果您想关闭整个应用程序,您可以使用for your 按钮,因为它会模拟用户单击“X”按钮。

于 2013-10-29T22:44:04.050 回答
1

如果您想使用按钮退出应用程序,则可以使用System.exit()frame.dispose()

但要小心,System.exit()因为这将终止JVM.

所以在此之前最好先从用户那里确认。与JOptionPane.showConfirmDialog();

private void bSalirActionPerformed(java.awt.event.ActionEvent evt){ 

        int exit = JOptionPane.showConfirmDialog(
                frame,
                "Are you sure you want to exit the application?",
                "Exit Application",
                JOptionPane.YES_NO_OPTION);                             
        if(JOptionPane.YES_OPTION == exit){
             frame.dispose(); // or System.exit(1);
        }
    }
于 2013-10-30T06:20:51.820 回答
0

我使用以下方法,只需调用此方法,它将关闭当前窗口/jFrame:

  private void close(){
    WindowEvent windowEventClosing = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
    Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(windowEventClosing);     
}

根据您的需要,还可以在properties中为jFrame设置“defaultCloseOperation” 。

于 2018-03-19T11:48:44.623 回答