2016-11-10 2 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()の詳細を読むとき、あなたのクラス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); 
     } 
    } 
} 

この方法で、あなたが表示ボタンをクリックするたびに、あなたがJPasswordFieldの現在の値を取得します(actionPerformedメソッドは、呼び出しです)。


D. Krauchankaは正しいですが、フィールドに入力したテキストを取得できないのはなぜですか。しかし、彼のアドバイスを考慮する必要があります!

1

field.getPassword()戻りchar[]は、文字列に変換するのは良い考えではありません。このリンクによると、セキュリティ(より詳細なあなたはhereを読むことができる)のために行われます。次のように比較する必要があります。

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

あなたのアドバイスを感謝します。私のミニプロジェクト –

1

String.valueOf()メソッドで試してください。

文字列str = String.valueOf(field.getPassword())

が変数passwordことを初期化されている https://www.tutorialspoint.com/java/java_string_valueof.htm

+1

のセキュリティが向上しました。valueOf()メソッドが私の知識を拡張しました。私はそれについてすべてをしなかった。ありがとう! –

関連する問題