java - 如何让 JFrame 上的 Red[X] 在退出 Java 程序之前等待 n 秒?

标签 java swing timer jframe windowlistener

我正在使用 WindowListener 来实现此目的,但窗口无论如何都会立即关闭。

代码:

WindowAdapter close =  new WindowAdapter()
{
  public void windowClosing(WindowEvent e)
  {
            try
            {
              Thread.sleep(2000);
            }
            catch(InterruptedException ie3)
            {
              System.out.println("Sleep interrupted");
            }
            System.exit(0);      
  }
 };

最佳答案

  1. 确保您setDefaultCloseOperation(DO_NOTHING_ON_CLOSE)

  2. 使用 javax.swing.Timer 而不是尝试让线程 hibernate 。

这是一个例子。我将 DELAY 设置为 3 秒,但您可以更改它

import java.awt.event.*;
import javax.swing.*;

public class WindowClosing {
    private static final int DELAY = 3000;

    public WindowClosing() {
        Timer timer = new Timer(DELAY, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
                ;
            }
        });
        timer.setRepeats(false);
        JFrame frame = createFrame(timer);
        frame.setVisible(true);

    }

    private JFrame createFrame(final Timer timer) {
        final JFrame frame = new JFrame();
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                timer.start();
                JOptionPane.showMessageDialog(frame, "WindowClosing");
            }
        });
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setLocationRelativeTo(null);
        return frame;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new WindowClosing();
            }
        });
    }
}

关于java - 如何让 JFrame 上的 Red[X] 在退出 Java 程序之前等待 n 秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22852591/

相关文章:

c++ - 功能工作定时器

java - 打印带有更多小数点的 float

java - 如何使用 JTable 来显示动态数据列表

java - 使用 java swing 绘制笔画...笔画不显示

java - JTextArea 的输入

javascript - 为网络应用程序实现计时器

javascript - 按键延迟,如何限制只执行一次函数调用?

javascript - 删除数据库中的一行 (JSP)

java - 使用 java 客户端和 php 服务器制作聊天应用程序

JavaFX 节点部分边框