如何在Java Swing中的System.exit()之前显示通知JDialog? (关闭)

时间:2016-06-11 10:15:03

标签: java swing

在我的简单登录窗口中,我将Action Listener添加到了我的登录按钮。按下按钮,程序将检查用户输入的信息,如果他们输入错误的信息3次,程序将创建一个新的JDialog通知用户,该程序将关闭。

我的问题是JDialog显示为空白,然后程序关闭。

这是我的代码

btnLogIn.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            char[] pass = pssPassWord.getPassword();
            String pss = new String(pass);

            if (!pss.toString().equals("admin") || !txtUserName.getText().equals("Adminuser")){
                if (attempts == 2){
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            new Inform("You entered the wrong info 3 times, the program will shut down");
                            try {
                                Thread.sleep(1000);
                                System.exit(0);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    });



                }else {
                    SwingUtilities.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            new Info("Wrong info, please check the info");
                        }
                    });
                    attempts += 1;
                }
            }else{

            }
        }
    });

这是我的Inform类:

public class Inform extends JDialog{

private JPanel pnlInform;
private JLabel lblInform;
private JButton btnOK;

public Inform(String info){
    setContentPane(pnlInform);
    lblInform.setText(info);
    pack();
    setVisible(true);
    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    setLocationRelativeTo(null);
    btnOK.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            dispose();
        }
    });
}

}

我的IDE是Intellij IDEA,我使用表单类来创建GUI,因此没有元素声明。

1 个答案:

答案 0 :(得分:0)

您没有将任何组件添加到Inform对话框,因为pnlInform未构建并解析为null并且它将通过contentPane cannot be set to null.
解决方案:构造组件(pnlInform,lblInform,btnOK),然后将它们添加到对话框中。您可以在下面找到功能完整的代码:

package test.q5;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Inform extends JDialog {

    private JPanel pnlInform=new JPanel();
    private JLabel lblInform=new JLabel();
    private JButton btnOK=new JButton("OK");

    public Inform(String info) {
//      setContentPane(pnlInform);
        add(pnlInform);
        lblInform.setText(info);
        pnlInform.add(lblInform);
        pnlInform.add(btnOK);

        pack();
        setVisible(true);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);
        btnOK.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                dispose();
            }
        });
    }

    public static void main(String[] args) {
        new Inform("Hello");
    }
}

但是,您仍然需要对邮件进行一些格式化,请随时将其添加为另一个问题以便提供帮助。