处置();在 java 中导致空指针异常错误
Dispose(); causing a null pointer exception error in java
我创建了一个具有多个 GUI classes 的项目。一切似乎 运行 都很好,但是当我尝试实施 dispose();函数它提供以下错误:线程“AWT-EventQueue-0”java.lang.NullPointerException 中的异常:无法调用“javax.swing.JFrame.dispose()”,因为“Login.loginframe”为空
在 Login.actionPerformed(Login.java:123)
下面是代码:
public class 主 {
public static void main(String[] args) {
Login loginframe = new Login();
}
}
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Login implements ActionListener {
private static JLabel userlabel , success , logo;
private static JTextField userText;
private static JLabel passwordlabel;
private static JPasswordField passwordtext;
private static JButton loginbutton , continuebutton;//, continuebutton2;
private static JFrame loginframe;
private static JPanel panel;
Login(){
JFrame loginframe = new JFrame ("Login");
JPanel panel = new JPanel();
loginframe.setSize(300, 300);
loginframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
loginframe.add(panel);
loginframe.setLocationRelativeTo(null);
panel.setLayout(null);
userlabel = new JLabel("User :");
userlabel.setBounds(10, 20, 80, 25);
panel.add(userlabel);
userText = new JTextField();
userText.setBounds(100, 20, 165, 25);
panel.add(userText);
passwordlabel = new JLabel ("Password : ");
passwordlabel.setBounds(10, 50, 80, 25);
panel.add(passwordlabel);
passwordtext = new JPasswordField ();
passwordtext.setBounds(100, 50, 165, 25);
panel.add(passwordtext);
logo = new JLabel();
logo.setIcon(new ImageIcon("emblem.jpg"));
logo.setBounds(115, 90, 50, 50);
panel.add(logo);
loginbutton = new JButton("Submit");
loginbutton.setBounds(100, 200, 80, 25);
loginbutton.setEnabled(true);
loginbutton.addActionListener(this);
panel.add(loginbutton);
success = new JLabel("");
success.setBounds(85, 130, 150, 80);
panel.add(success);
loginframe.setVisible(true);
continuebutton = new JButton("Continue");
continuebutton.setBounds(85, 200, 100, 25);
continuebutton.addActionListener(this);
continuebutton.setVisible(false);
continuebutton.setEnabled(false);
panel.add(continuebutton);
}
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
String user = userText.getText();
String password = passwordtext.getText();
System.out.println(user + ", " + password);
if(user.equals("admin") && password.equals("password1")) {
success.setText("Log in successful!");
loginbutton.setVisible(false);
loginbutton.setEnabled(false);
continuebutton.setVisible(true);
continuebutton.setEnabled(true);
if(e.getSource()==continuebutton) {
userText.setText("");
passwordtext.setText("");
new adminmain();
loginframe.dispose();
}
}
if(user.equals("user") && password.equals("password")) {
success.setText("Log in successful!");
loginbutton.setVisible(false);
loginbutton.setEnabled(false);
continuebutton.setVisible(true);
continuebutton.setEnabled(true);
if(e.getSource()==continuebutton) {
userText.setText("");
passwordtext.setText("");
new usermain();
loginframe.dispose();
}
}
}
}
你的主要方法中的这一行是你的问题JFrame loginframe = new JFrame ("Login");
您正在将 loginframe
的值分配给 main 方法中的一个局部变量,而 actionPerformed 方法引用 class 变量 loginframe
在您的 Login
class.
只需更改此行:
JFrame loginframe = new JFrame ("Login");
为此,您现在要将值分配为 class 变量而不是 运行 空指针问题:
loginframe = new JFrame ("Login");
注意:如果您有多个登录实例,那么使用这样的静态变量不是一个好主意object/class。
当我尝试 运行 代码时,它给了我这个错误。所以,如果我是正确的,adminmain() 或 usermain() 来自不同的 classes。如果尝试将 classes 导入主 class。如果您找到了解决方案,请回复我可以从中学习的解决方案。谢谢
Login.java:29: error: cannot find symbol
login();
^
符号:方法登录()
位置:class 登录
Login.java:118: 错误:找不到符号
新的管理维护();
^
符号:class adminmain
位置:class 登录
Login.java:134: 错误:找不到符号
新的用户维护();
^
符号:class usermain
位置:class 登录
Login.java:142: 错误:类型不兼容:意外的 return 值
return 例如;
^
4 个错误
我创建了一个具有多个 GUI classes 的项目。一切似乎 运行 都很好,但是当我尝试实施 dispose();函数它提供以下错误:线程“AWT-EventQueue-0”java.lang.NullPointerException 中的异常:无法调用“javax.swing.JFrame.dispose()”,因为“Login.loginframe”为空 在 Login.actionPerformed(Login.java:123)
下面是代码:
public class 主 {
public static void main(String[] args) {
Login loginframe = new Login();
}
}
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Login implements ActionListener {
private static JLabel userlabel , success , logo;
private static JTextField userText;
private static JLabel passwordlabel;
private static JPasswordField passwordtext;
private static JButton loginbutton , continuebutton;//, continuebutton2;
private static JFrame loginframe;
private static JPanel panel;
Login(){
JFrame loginframe = new JFrame ("Login");
JPanel panel = new JPanel();
loginframe.setSize(300, 300);
loginframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
loginframe.add(panel);
loginframe.setLocationRelativeTo(null);
panel.setLayout(null);
userlabel = new JLabel("User :");
userlabel.setBounds(10, 20, 80, 25);
panel.add(userlabel);
userText = new JTextField();
userText.setBounds(100, 20, 165, 25);
panel.add(userText);
passwordlabel = new JLabel ("Password : ");
passwordlabel.setBounds(10, 50, 80, 25);
panel.add(passwordlabel);
passwordtext = new JPasswordField ();
passwordtext.setBounds(100, 50, 165, 25);
panel.add(passwordtext);
logo = new JLabel();
logo.setIcon(new ImageIcon("emblem.jpg"));
logo.setBounds(115, 90, 50, 50);
panel.add(logo);
loginbutton = new JButton("Submit");
loginbutton.setBounds(100, 200, 80, 25);
loginbutton.setEnabled(true);
loginbutton.addActionListener(this);
panel.add(loginbutton);
success = new JLabel("");
success.setBounds(85, 130, 150, 80);
panel.add(success);
loginframe.setVisible(true);
continuebutton = new JButton("Continue");
continuebutton.setBounds(85, 200, 100, 25);
continuebutton.addActionListener(this);
continuebutton.setVisible(false);
continuebutton.setEnabled(false);
panel.add(continuebutton);
}
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
String user = userText.getText();
String password = passwordtext.getText();
System.out.println(user + ", " + password);
if(user.equals("admin") && password.equals("password1")) {
success.setText("Log in successful!");
loginbutton.setVisible(false);
loginbutton.setEnabled(false);
continuebutton.setVisible(true);
continuebutton.setEnabled(true);
if(e.getSource()==continuebutton) {
userText.setText("");
passwordtext.setText("");
new adminmain();
loginframe.dispose();
}
}
if(user.equals("user") && password.equals("password")) {
success.setText("Log in successful!");
loginbutton.setVisible(false);
loginbutton.setEnabled(false);
continuebutton.setVisible(true);
continuebutton.setEnabled(true);
if(e.getSource()==continuebutton) {
userText.setText("");
passwordtext.setText("");
new usermain();
loginframe.dispose();
}
}
}
}
你的主要方法中的这一行是你的问题JFrame loginframe = new JFrame ("Login");
您正在将 loginframe
的值分配给 main 方法中的一个局部变量,而 actionPerformed 方法引用 class 变量 loginframe
在您的 Login
class.
只需更改此行:
JFrame loginframe = new JFrame ("Login");
为此,您现在要将值分配为 class 变量而不是 运行 空指针问题:
loginframe = new JFrame ("Login");
注意:如果您有多个登录实例,那么使用这样的静态变量不是一个好主意object/class。
当我尝试 运行 代码时,它给了我这个错误。所以,如果我是正确的,adminmain() 或 usermain() 来自不同的 classes。如果尝试将 classes 导入主 class。如果您找到了解决方案,请回复我可以从中学习的解决方案。谢谢
Login.java:29: error: cannot find symbol
login();
^
符号:方法登录() 位置:class 登录 Login.java:118: 错误:找不到符号 新的管理维护(); ^ 符号:class adminmain 位置:class 登录 Login.java:134: 错误:找不到符号 新的用户维护(); ^ 符号:class usermain 位置:class 登录 Login.java:142: 错误:类型不兼容:意外的 return 值 return 例如; ^ 4 个错误