2016-04-20 5 views
1

Мне нужна помощь с моей программой. Я пытаюсь сделать программу грубой силы как проект, и я не знаю, как сделать значения цикла в JTextField в методе print(). Мне не нужно только конечное значение цикла. Я знаю, что этот вопрос задан очень много, и я пробовал все, но он просто не работает. Пожалуйста, кто-нибудь может мне помочь? Буду признателен!Как изменить значения JTextField внутри цикла

public class BF implements ActionListener { 
private JPanel contentPane; 
private JTextField password; 
private JTextField length; 
public JTextField generateField; 
JRadioButton numbers; 
JButton generate; 
JLabel passwordfound; 
JLabel timelabel; 
int min; 
int max; 
int stringLength; 
private int[] chars; 
String n=""; 
char[] passCom; 
JFrame frame; 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       BF frame = new BF(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

public BF() { 
    frame = new JFrame ("Brute Force Attack Program"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setBounds(100, 100, 754, 665); 

    frame.setResizable(false); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    frame.setLocationRelativeTo(null); 
    frame.setContentPane(contentPane); 
    contentPane.setLayout(null); 
    try { 
     UIManager.setLookAndFeel(
       "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
    } catch(Exception e) { 
    } 
    backgroundPanel panel = new backgroundPanel(); 
    panel.setBounds(0, 0, 749, 633); 
    contentPane.add(panel); 
    panel.setLayout(null); 

    generate = new JButton("Find Password"); 
    generate.setFont(new Font("Tahoma", Font.BOLD, 15)); 
    generate.setBounds(292, 401, 145, 35); 
    generate.addActionListener(this); 
    panel.add(generate); 

    generateField = new JTextField(); 
    generateField.setForeground(Color.WHITE); 
    generateField.setFont(new Font("Tahoma", Font.BOLD, 24)); 
    generateField.setEditable(false); 
    generateField.setBounds(315, 449, 186, 54); 
    generateField.setBackground(new Color(0,0,0,0)); 
    generateField.setBorder(javax.swing.BorderFactory.createEmptyBorder()); 
    panel.add(generateField); 
    generateField.setColumns(10); 


    frame.setVisible(true); 


} 
public void run(char min, char max, int len) 

{ 
    this.min = min; 

    this.max = max; 

    this.stringLength = len; 

    chars = new int[stringLength + 1]; 

    Arrays.fill(chars, 1, chars.length, min); 


    while (chars[0] == 0&&!n.equals(password.getText())) 

    { 


print(); 

increment(); 
n=String.valueOf(passCom); 

    } 


} 

public void increment() 

{ 

    for (int i = chars.length - 1; i >= 0; i--) 

    { 

    if (chars[i] < max) 

    { 

    chars[i]++; return; 

    } 

    chars[i] = min; 

    } 

} 

public void print() 

{ 
    int x=0; 
    for (int i = 1; i < chars.length; i++) 

    { 
    passCom[x]=(char)chars[i]; 
    x++; 
    String txt = new String (passCom); 
    generateField.setText(txt); 


    } 

} 




@Override 
public void actionPerformed(ActionEvent e) { 

    if (!password.getText().equals("") && e.getSource() == generate && !length.getText().equals("")&&numbers.isSelected()){ 
     int count = Integer.parseInt(length.getText()); 
     passCom = new char [count]; 
      run('0','9',count); 
    } 

    } 
} 
+0

Попробуйте добавить задержку 'Thread.sleep (1000)' где 1000 - миллисекунда – Tin

+0

Что это за панель 'backgroundPanel panel = new backgroundPanel();' do? – bili

+0

Ваши кодовые блоки не выполняются. И что вы хотите в цикле на самом деле? – ziLk

ответ

1

Например, строка 123 имеет длину 3 так, перестановки может быть 000001002 и т.д.

Тогда почему только один дисплей в момент времени Т?

Вместо этого я хотел бы использовать JTextArea и append каждое значение в текстовое поле, чтобы все значения были видны одновременно. Никто не запомнит все значения, если вы показываете один за раз.

В противном случае вы должны использовать Swing Timer для отображения по одному.

+0

Я не хочу показывать все значения сразу, мне нужно одно значение за раз. –

+0

Даже если вы хотите их по одному, вы должны использовать таймер. Затем вы просто используете метод setText() для замены последнего значения. – camickr

+0

Как я могу реализовать его в своей программе? Я никогда не использовал таймеры до –

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