2013-09-26 2 views
0

Однажды ночью я занимался программированием, и у меня возникла проблема. Кажется, что инструкция if в прослушивателе действий для моей кнопки не подбирается. Я совершенно новичок в программировании, поэтому надеюсь, что это не слишком очевидно. Любые предложения? Вот код:Проблема с простой программой паролей - Java

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.*; 
import java.util.*; 
import javax.swing.*; 

public class Login extends JFrame implements ActionListener { 
JTextField tfUsername, tfPassword; 
JLabel jlUser, jlPass; 
JTextArea tarea; 
JButton bLogin; 

public Login(){ 
    JFrame frame = new JFrame("Login Test"); 
    JPanel panel = new JPanel(); 
    jlUser = new JLabel("Username"); 
    tfUsername = new JTextField(20); 
    jlPass = new JLabel("Password"); 
    tfPassword = new JTextField(20); 
    bLogin = new JButton("Login"); 
    tarea = new JTextArea(); 

    frame.setSize(335,150); 
    frame.add(panel); 
    panel.add(jlUser); 
    panel.add(tfUsername); 
    panel.add(jlPass); 
    panel.add(tfPassword); 
    panel.add(bLogin); 
    panel.add(tarea); 
    bLogin.addActionListener(this); 
    frame.setResizable(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 


public static void main(String[] args) { 
new Login(); 

} 


@Override 
public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 
    if(e.getSource() == bLogin){ 
     String user = tfUsername.getText(); 
     String pass = tfPassword.getText(); 
     String be = "hi"; 

        if(pass == be){ 
      tarea.setText("Successful"); 
     } 
} 

} 

ответ

6

Проблема заключается с тем, как вы сравниваете pass и beString сек

if (pass == be) { 
    tarea.setText("Successful"); 
} 

Это сравнение ссылок на объекты, а не их содержание, которое всегда будет ложным .. .Instead вы должны использовать .equals

if (pass.equals(be)) { 
    tarea.setText("Successful"); 
} 

Это будет сделать чувствительное сравнение. При необходимости, вы можете также использовать .equalsIgnoreCase где регистр не имеет значения

паролей, вы должны использовать JPasswordField и хранить пароль в char массива, как String значения проще выбрать из памяти.

Это потребовало бы использовать Arrays.equals(char\[\], char\[\]) вместо

См How to use Password Fields для получения более подробной информации ...

1

До сих пор, что я могу видеть это строка сравнить ошибку. Отправьте журнал ошибок, чтобы узнать, есть ли другая ошибка. В матче струнной попробовать

if (pass.equals(be)) { 
    tarea.setText("Successful"); 
} 

Вы также можете использовать CompareTo функцию, а также для проверки строки

Также GetText для Перевал не очень обеспеченных

+0

Вау, он принял вас 3 минуты, чтобы придумать тот же ответ, который я сделал ... – MadProgrammer

+0

u быстрее, поздравляю – LynAs

+0

Простите, рано, и я немного поспал, поэтому я немного циничен. Я, конечно, не против людей, расширяющийся на ответы или предоставления дополнительных точек зрения, но это не раздражать, когда люди заселяют вопросы с тем же ответом - ИМХО: P – MadProgrammer

Смежные вопросы