Java frame.dispose ();не работает - PullRequest
0 голосов
/ 04 июня 2018

Может кто-нибудь подсказать мне, почему 'frame.dispose ();'не распоряжаться рамкой?Другой метод называется но frame.dispose ();просто игнорируется.Этот класс Java используется для проверки того, совпадает ли сохраненный ответ, полученный от другого класса Java (RecoveryQuestion.check ()) с вводом пользователя.Открытые переменные, такие как StoredQuestion и StoredPassword, также находятся в классе RecoveryQuestion.Кроме того, я использую форму Intelli J IDEA GUI и не знаю, как извлечь код, однако форма работает гладко, как и предполагалось, кроме как с frame.dispose ();

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.io.IOException;

public class ForgotPassword {
private JPanel panel1;
private JTextField answer;
private JLabel Question;
private JButton Submit;
private JFrame frame = new JFrame("Password Reset");

public ForgotPassword() {



    Submit.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            if(RecoveryQuestion.StoredPassword.equals(answer.getText())) {
                //frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
                frame.dispose();
                FirstRun.main(null);



            }
            else JOptionPane.showMessageDialog(null,"Incorrect Answer");

        }
    });
}

public void setUI() {


    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    frame.setContentPane(new ForgotPassword().panel1);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setPreferredSize(new Dimension(400,250));
    frame.pack();
    frame.setResizable(false);




}

public static void main(String[] args) {

    try{
        RecoveryQuestion.Check();
    } catch(IOException e1) {}

    new ForgotPassword().setUI();
}

private void createUIComponents() {
    // TODO: place custom component creation code here
    Question = new JLabel();
    Question.setText(RecoveryQuestion.StoredQuestion);
}

}

1 Ответ

0 голосов
/ 04 июня 2018

Каждый вызов new ForgotPassword() делает именно это - он создает совершенно новый и уникальный экземпляр ForgotPassword.Посмотрите на приведенный выше код и посчитайте, сколько раз вы вызываете это - я вижу два раза, предполагая, что ваша проблема в том, что вы отображаете JFrame из одного из этих экземпляров и пытаетесь избавиться от него в другом -два разных JFrames, которые не связаны друг с другом.

Предложения:

  • Ваш код очень запутан с примерами, создающими экземпляры себя внутри себя.Упростить.
  • Создайте только один ForgotPassword в своем графическом интерфейсе и передайте его, где необходимо
  • Побочная проблема: не должно ли окно такого типа быть диалоговым окном (т. Е. JDialog)а не окно приложения (т. е. JFrame)?
  • Если ваш код работал должным образом, то вызов .dispose() для этого JFrame должен привести к завершению JVM (завершению всей программы), так как вы 'переустанавливаем для операции закрытия по умолчанию значение EXIT_ON_CLOSE.
  • . Побочный вопрос 2. Ваш отправленный код недействителен MCVE , что означает, что мы не можем легко скопировать код, вставить его в нашу среду IDE и скомпилироватьи запустить его без изменений, что затруднит нам полное понимание вашего кода и заставит меня угадать вашу проблему.В будущем (и сейчас), пожалуйста, рассмотрите возможность размещения одного из них.Обратите внимание, что мы не хотим видеть всю вашу программу , и при этом вы не должны публиковать ссылку на хранилище кода.Вместо этого держите это маленьким, держите это простым, и заставьте это функционировать.
...