而循环没有Java中的指令

时间:2014-03-08 13:10:58

标签: java jdialog

为什么当while循环为空时此代码不会停止。如果我添加一条指令,代码工作正常。通常在用户单击按钮后,测试变量将被更改,因此循环将结束。是否有另一种方法可以测试JDialog的处理方式。

public class FenetreAjoutClass extends JDialog {
    private JPanel pan = new JPanel();
    private JPanel buttPan = new JPanel();
    private JTextField schoolLevl = new JTextField();
    private JButton valide = new JButton("OK");
    private static String infos = null;
    private static boolean test = false;

    private JButton cancel = new JButton("CANCEL");

    FenetreAjoutClass(JFrame parent, Boolean modal) {
        valide.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                infos = schoolLevl.getText();
                test = true;
                dispose();

            }
        });

        cancel.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                test = true;
                dispose();

            }
        });
        this.setLocationRelativeTo(null);
        this.setResizable(true);
        this.setLayout(new BorderLayout());
        pan.setLayout(new GridLayout(1, 1));
        pan.add(schoolLevl);
        this.add(pan, BorderLayout.NORTH);
        buttPan.add(valide);
        buttPan.add(cancel);
        this.add(buttPan, BorderLayout.SOUTH);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        System.out.println(get());
    }

    public static String get() {
        new FenetreAjoutClass(null, false);
        while (!test) {
            //System.out.println(test);
        }
        return infos;
    }
}

1 个答案:

答案 0 :(得分:2)

dispose将释放你的记忆。对话框的所有数据都消失了。如果您想再次显示窗口,则必须使用可见性。可以使用isVisible()检查此内容。

您可以使用dispose()

替换代码中的this.setVisible(false)
public static String get() {
        FenetreAjoutClass dialog = new FenetreAjoutClass(null, false);
        while (dialog.isVisible()) {
            System.out.println("is Visible");
        }
        System.out.println("is not Visible");
        return infos;
}

请注意,在关闭对话框后,控制台仍会在短时间内打印“可见”。但这是因为控制台无法像while循环重启那样快速打印。