Генератор случайных паролей Java - PullRequest
1 голос
/ 21 января 2012

Я сделал это, чтобы помочь мне попрактиковаться в пользовательском интерфейсе.По какой-то причине пароль не отображается на экране при генерации!нажата.Программных ошибок тоже нет.Как видите, у меня есть JLabel для пароля.

Код:

package components; 
import java.io.*;
import java.util.Scanner;
import java.util.Random;
import javax.swing.*;
import javax.*;
import java.awt.*;
import java.awt.event.*;

public class PassGenButton extends JPanel implements ActionListener{

protected JButton generate;
protected JLabel passLabel;
public String password = null;

public PassGenButton()
{
    JButton generate = new JButton("Generate!");
    JLabel passLabel = new JLabel(password, JLabel.CENTER);
    passLabel.setFont(new Font("Serif", Font.PLAIN, 36));
    passLabel.setBorder(BorderFactory.createTitledBorder("Password"));
    setLayout(new BorderLayout());
    generate.addActionListener(this);
    add(generate, BorderLayout.SOUTH);
    add(passLabel, BorderLayout.CENTER);
}

public void actionPerformed(ActionEvent e)
{
    GetPassword();
}

private static void createAndShowGUI()
{
    JFrame frame = new JFrame("Password Generator");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    PassGenButton contentPane = new PassGenButton();

    frame.setContentPane(contentPane);
    frame.setSize(400, 200);
    frame.setLocation(600, 300);
    frame.setVisible(true);
}   

public static void main(String[] args)
{
    javax.swing.SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            createAndShowGUI();     
        }
    });
}

public void GetPassword()
{
    password = null;
    String[] nouns = new String[2432];
    File file = new File("C:\\Temp\\nounlist.txt");
    String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char[] characters = chars.toCharArray();

    try
    {
        nouns = ReadTextFile(file);
    }
    catch (FileNotFoundException f)
    {
        f.getMessage();
        System.exit(1);
    }

    ShowPassword(nouns, characters);
}

public final String[] ReadTextFile(File aFile) throws FileNotFoundException
{
    String[] strings = new String[2432];
    int counter = 0;
    Scanner scanner = new Scanner(new FileReader(aFile));

    try
    {
        while (scanner.hasNextLine())
        {
            strings[counter] = scanner.nextLine();
            counter++;
        }
    }

    finally
    {
        scanner.close();
    }

    return strings;
}

public void ShowPassword(String[] nouns, char[] characters)
{
    String password;
    Random generator = new Random();
    int chosenNoun = 0;
    int chosenChar = 0;
    int int1 = 0;
    int int2 = 0;

    chosenNoun = generator.nextInt(2432);
    chosenChar = generator.nextInt(26);
    int1 = generator.nextInt(10);
    int2 = generator.nextInt(10);

    password = nouns[chosenNoun] + characters[chosenChar] + Integer.toString(int1) + Integer.toString(int2);
}
}

Ответы [ 4 ]

3 голосов
/ 21 января 2012

Вы скрываете свою переменную passLabel (а также кнопку generate).Вы уже объявили их как переменные экземпляра, вам не нужно повторно объявлять их в конструкторе, просто присвойте им значения.Поэтому вместо:

JButton generate = new JButton("Generate!");
JLabel passLabel = new JLabel(password, JLabel.CENTER);

вам нужно иметь:

generate = new JButton("Generate!");
passLabel = new JLabel(password, JLabel.CENTER);

Затем вам нужно убедиться, что вы установили его текст в соответствии с ответом bdares.

2 голосов
/ 21 января 2012

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

Вам нужна последняя строка, читающая что-то вроде этого:

passLabel.setText(password);
2 голосов
/ 21 января 2012

Отредактированный фрагмент

public void GetPassword()
{
    password = null;
    String[] nouns = new String[2432];
    File file = new File("C:\\Temp\\nounlist.txt");
    String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char[] characters = chars.toCharArray();

    try
    {
        nouns = ReadTextFile(file);
    }
    catch (FileNotFoundException f)
    {
        f.printStackTrace();
        //System.exit(1);
    }

    ShowPassword(nouns, characters);
}

Вывод

java.io.FileNotFoundException: C:\Temp\nounlist.txt (The system cannot find the path specified)
       at java.io.FileInputStream.open(Native Method)
       at java.io.FileInputStream.<init>(FileInputStream.java:120)
       at java.io.FileReader.<init>(FileReader.java:55)
       at PassGenButton.ReadTextFile(PassGenButton.java:78)
       at PassGenButton.GetPassword(PassGenButton.java:63)
       at PassGenButton.actionPerformed(PassGenButton.java:29)
       ...

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

0 голосов
/ 28 марта 2013

Вы можете использовать генератор паролей ostermillers. У него также есть примеры на своем веб-сайте и javaapplet http://ostermiller.org/utils/src/RandPass.java.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...