Java 线程 NullPointerException

标签 java multithreading

我对 Java 比较陌生,我正在尝试为我的桌面应用程序制作一个登录页面。我有一个名为“listen”的线程,应在应用程序首次打开时调用该线程,其工作是检查用户名和密码字段是否不为空。

public class Login extends JFrame implements Runnable {
    private JPanel contentPane;
    private JTextField txtUsername;
    private JPasswordField pwdPassword;
    private JLabel lblUsername;
    private JButton btnLogin;
    private JLabel lblPassword;
    private JCheckBox cboxRemember;
    private Thread run, listen;
    private boolean running = true;

public Login() {
    createWindow();
    run = new Thread(this, "Running");
    running = true;
    run.start();    
}

private void createWindow() {
     //application layout and actionListener for login button
}

public void run() {
    listen();

}

public void listen() {
    listen = new Thread("Listen") {
        public void run() {
            while (running) {
                if (txtUsername.getText().equals("") || pwdPassword.getText().equals("")) btnLogin.setEnabled(false);
                else btnLogin.setEnabled(true);
            }
        }
    };
    listen.start();
}

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Login frame = new Login();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
  }
}

每当我尝试执行我的代码时,“监听”线程都会在此行上抛出 NullPointerException if (txtUsername.getText().equals("") || pwdPassword.getText().equals("")) btnLogin.setEnabled(false);我不确定我做错了什么,任何帮助将不胜感激,谢谢。

最佳答案

初始化您的txtUserName和pwdPassword:

 txtUsername = new JTextField();
 pwdPassword = new JPasswordField();

希望这有帮助。

关于Java 线程 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32276666/

相关文章:

java - MediaStore.Images.Thumbnails 似乎是空的

java - JBoss - ssl_error_weak_server_ephemeral_dh_key 的配置

java - 如果时钟改变,Timertask.scheduleAtFixedRate 应该做什么?

c - 具有循环缓冲区的多生产者单消费者

Java 主类线程不再使用 Java 多线程终止

java - Java EE 中的长期线程

java - 是否有一种可以在格式之间动态转换的模式?

java - 使用 Java 8 API 将键值对象对列表转换为简单的 Multimap

c - 很难跟踪内存损坏 - 使用 Valgrind 运行时可以正确无误地运行

java - 在多线程应用程序中,是否应该使用 ReadWriteLock 锁定基本类型的 getter/setter?