هنا و فى هذا المثال كنت أجرب ال JPasswordField
لدينا 2 class فى ال class PassWordDilaog أقوم بعمل منادة للدالة getField() من ال class PasswordTest
و لعمل هذه المنادة قمت بكتابة
passwordField = new JPasswordField();
فى الclass PassWordDilaog و لكنه يعطينى خطأ Exception in thread "main" java.lang.StackOverflowError
------------------------------------------------------
الشفيرة :
-----------
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class PassWordTest extends JFrame {
private JPanel panel, componentPanel;
private JTextField field;
private JButton button;
private PassWordDialog passWordDialog;
public PassWordTest() {
panel = new JPanel();
componentPanel = new JPanel(new FlowLayout());
/////////////////////////////////////
field = new JTextField(10);
button = new JButton("GO");
passWordDialog = new PassWordDialog();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
passWordDialog.setSize(new Dimension(500, 250));
passWordDialog.setVisible(true);
}
});
///////////////////////////////////////
componentPanel.add(field);
componentPanel.add(button);
///////////////////////////////////////
panel.add(componentPanel);
getContentPane().add(componentPanel);
}
public char[] getField() {
return field.getText().toCharArray();
}
public static void main(String[] args) {
PassWordTest passWordTest = new PassWordTest();
passWordTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
passWordTest.setSize(new Dimension(300, 200));
passWordTest.setLocationRelativeTo(null);
passWordTest.setVisible(true);
}
}import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
public class PassWordDialog extends JDialog {
private JPanel panel;
private JPasswordField passwordField;
private JButton button;
private PassWordTest passWordTest;
public PassWordDialog() {
panel = new JPanel(new BorderLayout());
passwordField = new JPasswordField();
button = new JButton();
panel.add(passwordField);
panel.add(button);
/////////////////////////////////////////
passWordTest = new PassWordTest();
////////////////////////////////////////
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
char[] input = passwordField.getPassword();
if (isCorrectPassWord(input)) {
JOptionPane.showMessageDialog(null, "true password");
} else {
JOptionPane.showMessageDialog(null, "false password");
}
}
private boolean isCorrectPassWord(char[] input) {
boolean isCorrect = true;
char[] correctPassword = passWordTest.getField();
if (input.length != correctPassword.length) {
isCorrect = false;
} else {
isCorrect = Arrays.equals(input, correctPassword);
}
Arrays.fill(correctPassword, '0');
return isCorrect;
}
});
}
}الكود فى المرفقات
---------------------------------------
شكراً

