Java检测应用程序何时关闭

时间:2018-10-23 14:32:03

标签: java eclipse shutdown-hook

几年前,我学习Java大约一年了。现在我想回到它,但是我的技能有些生锈。因此,我将Eclipse与WindowBuilder结合使用,以使表单应用程序易于重新启动。我想在退出应用程序时得到一个弹出窗口,因为在以后的项目中,当我通过自己的退出按钮以外的其他方式(例如,通过红叉或Alt + F4)退出应用程序时,需要执行一些代码。

所以这是我到目前为止的代码:

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class Mainframe {

private JFrame frame;

/**
 * Launch the application.
 */
public static void main(String[] args) {


    Runtime.getRuntime().addShutdownHook(new Thread()
    {
        @Override
        public void run()
        {
            JOptionPane.showConfirmDialog(null, "Do you", "Message", 
                    JOptionPane.YES_NO_OPTION);
            MessageBox.infoBox("YOUR INFORMATION HERE", "TITLE BAR MESSAGE");
        }
    });

    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Mainframe window = new Mainframe();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

}

/**
 * Create the application.
 */
public Mainframe() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JButton btnNewButton = new JButton("New button");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            System.exit(0);


        }
    });
    frame.getContentPane().add(btnNewButton, BorderLayout.SOUTH);
}



}

我使用了this中“退出应用程序时”的代码  例如,但是无论我如何关闭它,都不会出现“消息框”。当我直接在主要空白之后使用MessageBoxes的代码时,出现MessageBoxes,所以我想我将ShutdownHook放错了位置。

如果有人可以帮助我解决此问题,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

shutdown挂钩旨在在应用程序关闭后(通过System.exit调用或来自操作系统的kill信号)执行某些操作(例如,关闭数据库连接和关闭线程)。不能用于此类对话框。

您将需要向WindowListener中添加JFrame,并对windowClosing和/或windowClosed事件执行操作。然后,在此侦听器中,您可以显示一个对话框或您想要的任何内容。

如果希望能够覆盖关闭窗口,请在this question上找到有关操作方法的详细信息。