Почему я получаю ошибки при создании Jframe при нажатии кнопки?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему я получаю ошибки при создании Jframe при нажатии кнопки?

Сообщение Anonymous »

Я пытаюсь создать менеджер паролей. После входа в систему я хочу, чтобы оно перешло в главное окно, но когда я нажимаю «Войти», я вижу ошибки в терминале, и окно входа в систему не удаляется при появлении главного окна.
Окно входа:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.*;

public class LoginWindow extends JFrame {
public LoginWindow() {
setTitle("Login Window");
setSize(800, 500);
setLocationRelativeTo(null);
setResizable(false);

setLayout(new GridBagLayout());
JLabel userLabel = new JLabel("Username:");
JTextField userField = new JTextField(15);
JLabel passLabel = new JLabel("Password:");
JPasswordField passField = new JPasswordField(15);
JButton loginButton = new JButton("Login");

GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(5, 5, 5, 5);
gbc.anchor = GridBagConstraints.CENTER;

gbc.gridx = 0; gbc.gridy = 0;
add(userLabel, gbc);
gbc.gridx = 1;
add(userField, gbc);

gbc.gridx = 0; gbc.gridy = 1;
add(passLabel, gbc);
gbc.gridx = 1;
add(passField, gbc);

gbc.gridx = 0; gbc.gridy = 2; gbc.gridwidth = 2;
add(loginButton, gbc);

loginButton.addActionListener(e -> {
PasswordWindow window = new PasswordWindow();
window.setVisible(true);
SwingUtilities.getWindowAncestor(this).dispose();
});

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}

Окно пароля:
import javax.swing.*;

public class PasswordWindow extends JFrame {

private int width, height;
public PasswordWindow() {
width = 800;
height = 500;

setTitle("Password Manager");
setSize(width, height);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public int getWidth(){
return width;
}
public int getHeight(){
return height;
}

public void setWidth(int width){
this.width = width;
}
public void setHeight(int height){
this.height = height;
}
}

~/projects/passwordManager via ☕ v21.0.8
➜ ls
bin ClickListener.java Main.java PasswordWindow.java UserEntry.java
build.sh LoginWindow.java PasswordEntry.java run.sh
~/projects/passwordManager via ☕ v21.0.8
➜ ./build.sh && ./run.sh
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.awt.Window.dispose()" because the return value of "javax.swing.SwingUtilities.getWindowAncestor(java.awt.Component)" is null
at LoginWindow.lambda$new$0(LoginWindow.java:40)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2314)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:407)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6621)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3398)
at java.desktop/java.awt.Component.processEvent(Component.java:6386)
at java.desktop/java.awt.Container.processEvent(Container.java:2266)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4996)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
~/projects/passwordManager via ☕ v21.0.8 took 4s



Подробнее здесь: https://stackoverflow.com/questions/797 ... g-a-button
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»