2015-08-28 3 views
0

Я относительно новичок в Java, и я пытаюсь сделать страницу входа для своего настольного приложения. У меня есть поток под названием «listen», который должен вызываться, когда приложение открывается первым, его задача - проверять погоду, поля имени пользователя и пароля не пустые.Java threading NullPointerException

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); я не уверен, что я делаю неправильно, любая помощь будет оценена, спасибо.

+0

Ваше 'txtUsername' и' pwdPassword' JTextField пусты при запуске приложения. – CubeJockey

+1

вы будете NPE, если txtUsername.getText() возвращает null ..... добавьте чек для этого, и это должна быть первая проверка. Что-то вроде (txtUsername.getText()! = Null && (txtUsername.getText(). Equals ("") || pwdPassword.getText(). Equals (""))). Ох и @ Троббинс упомянули, то же самое относится и к полю pwdPassword :) – digidude

+1

Когда вы назначаете значение 'txtUsername'? У него явно нет (кроме «null»). – bcsb1001

ответ

0

Я думаю, что вы, если {} блок запускается до любой инициализации. Добавить

if (txtUsername.getText()!=null &&(txtUsername.getText().equals("") || pwdPassword.getText().equals(""))) 
1

Инициализировать ваш txtUserName и pwdPassword:

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

Надеется, что это помогает.

0

Поскольку txtUsername и pwdPassword не были инициализированы, вы получите NPE в своем операторе IF {}.