如何在Swing应用程序中使用退出按钮?

时间:2014-08-22 12:06:21

标签: java eclipse swing

我是使用Swing开发Java Form Application的新手。退出应用程序的退出按钮的合适代码是什么?

例如: 在C#(.NET Framework)中,我们使用Application.Exit();作为退出什么按钮的代码。 Java中退出应用程序的等效代码是什么?

5 个答案:

答案 0 :(得分:9)

jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

现在进行一些解释。与问题中最接近的等价物是......

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

但这会杀死整个JRE,而不管正在运行的其他非守护程序线程。如果它们正在运行,则应该关闭它们或明确清理它们。

如果没有其他非守护程序线程在运行,DISPOSE_ON_CLOSE将部署当前JFrame并结束虚拟机。

答案 1 :(得分:2)

@AndrewThompson是关于JFrame.EXIT_ON_CLOSE的,但你可以采取措施避免杀人。

JFrame.EXIT_ON_CLOSE很好,如果您在JFrame.processWindowEvent(WindowEvent)次覆盖WindowEvent.WINDOW_CLOSING事件时进行清理。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.Timer;

public class ExitJFrame extends JFrame {

    public ExitJFrame() {
        setLayout(new BorderLayout());

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton button = new JButton("Exit");
        add(button);

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                ExitJFrame.this.processWindowEvent(
                        new WindowEvent(
                                ExitJFrame.this, WindowEvent.WINDOW_CLOSING));
            }
        });

        setSize(200, 200);
        setLocationRelativeTo(null);
    }

    @Override
    protected void processWindowEvent(WindowEvent e) {
        // more powerful as a WindowListener, since you can consume the event 
        // if you so please - asking the user if she really wants to exit for
        // example, do not delegate to super if consuming.
        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            doCleanup();
            super.processWindowEvent(e); 
        } else {        
            super.processWindowEvent(e); 
        }
    }

    private void doCleanup() {
        final JDialog dialog = new JDialog(this, true);
        dialog.setLayout(new BorderLayout());
        dialog.setUndecorated(true);
        JProgressBar progress = new JProgressBar();
        dialog.add(progress);
        dialog.add(new JLabel("Waiting for non-daemon threads to exit gracefully..."), BorderLayout.NORTH);
        progress.setIndeterminate(true);

        Timer timer = new Timer(2000, new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                dialog.setVisible(false);
                dialog.dispose();
            }
        });
        timer.setRepeats(false);
        timer.start();
        dialog.pack();
        dialog.setLocationRelativeTo(this);
        dialog.setVisible(true);
    }

    public static void main (String[] args) {
        new ExitJFrame().setVisible(true);
    }

}

答案 2 :(得分:1)

如果您想创建一个按钮,当用户点击该按钮时退出该应用程序,请尝试以下操作:

JButton exit = new JButton("exit");

ActionListener al = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    }
};

exit.addActionListener(al);

现在,当您按下该按钮时,应用程序将退出。

答案 3 :(得分:0)

如果你正在谈论要放入表单中的JButton,那么你想在构造函数中为表单调用JFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE),然后你的按钮处理程序可以调用

dispose()

关闭表单。

答案 4 :(得分:0)

非常简单的回答是@Andrew Thompson所说的。

jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

如果你想通过代码以其他方式制作它。然后你可以把这个代码放在任何地方在活动中。

System.exit(0);

希望这会有所帮助。