2016-11-10 37 views
2

我无法从我的JPasswordField获取输入。我得到它,因为它将作为输出显示在JOptionPane中(仅用于练习目的)。无法从PasswordField获取文本,甚至转换为字符串

Eclipse不给我任何错误,但程序不能正常工作

好了,所以这里的程序流程。如果JPasswordField等于“admin”。然后会出现一个对话框并显示我的密码(即“admin”)。而已。

我已经将我的JPasswordField转换为字符串。 但仍然。没有要显示的字符串。 Eclipse中也不会显示任何错误。

代码:

public class GUI2 extends JFrame { 
private JButton shut; 
private JPasswordField field; 


public GUI2(){ 
    super("Display The Password"); 
    setLayout(new FlowLayout()); 

    field = new JPasswordField(10); 
    add(field); 
    display = new JButton("Display"); 
    add(display); 


    thehandler handler = new thehandler(); 
    display.addActionListener(handler); 




} 

class thehandler implements ActionListener{ 
    String password = new String(field.getPassword()); 

    public void actionPerformed(ActionEvent event){ 
     if (password.equals("admin")){ 

      JOptionPane.showMessageDialog(null, password); 


     } 


    } 

} 
} 
+2

在''actionPerformed''方法内移动''String password = new String(field.getPassword());''。 – f1sh

回答

1

问题阅读关于将String.valueOf()的更多细节时,变量password被初始化时,你的类thehandler被实例化(new thehandler();)。此时密码等于空字符串。 然后当你输入密码并想显示它时,它并没有被刷新。

解决方案:

class thehandler implements ActionListener { 
    public void actionPerformed(ActionEvent event){ 
     String password = new String(field.getPassword()); 
     if (password.equals("admin")){ 
      JOptionPane.showMessageDialog(null, password); 
     } 
    } 
} 

这样,你点击显示按钮每次(actionPerformed方法是调用),您将获取JPasswordField的当前值。


D. Krauchanka是正确的,但它不是你为什么不能让你在字段中键入的文本。不过你应该考虑他的建议!

1

field.getPassword()回报char[],它是为安全性(更详细的您可以阅读here)根据这个链接是不将其转换为字符串一个好主意做。你应该这样比较:

char[] correctPassword = { 'a', 'd', 'm', 'i', 'n' }; 
Arrays.equals (field.getPassword(), correctPassword); 
+0

感谢您的建议:D。通过我的小型项目 –

相关问题