Это дополнение к ответу @ tomdemuyt, так как я просто очень быстро запустил ваш код. Я получил совершенно другую ошибку, чем у вас:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JButton cannot be cast to javax.swing.JTextField
at StupidCode$loginButton.actionPerformed(PasswordForm.java:54)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
...more stack trace information that I'm not sure will help at this stage
Исключение, которое я получил, было буквально копированием вашего кода в Eclipse, плюс добавление необходимых импортов. Итак, как @Stephen указывал ранее, у вас должны быть какие-то проблемы в процессе сборки или, если вы ничего не изменили, то, возможно, настройки вашего проекта неверны?
Редактировать
Хорошо, я могу заставить код делать то, что вы хотите. Просто код кажется не очень приятным, и уже есть чрезмерная зависимость от статических классов / методов, на что указал Стивен. Надеюсь, это всего лишь экспериментальный код, который вы используете для изучения Java ...
Если вы сделаете JPasswordField
приватным и статическим, т.е.
private static JPasswordField passwordInput;
//main method below
//...
//main method finished, action listener follows...
вне основного метода, тогда ваши ActionListener
, loginButton
смогут его "увидеть". Таким образом, вы можете сделать что-то вроде
JOptionPane.showMessageDialog(null,"Text is: "+ new String(passwordInput.getPassword()));
Но на самом деле это не очень хороший способ построения вашего класса. В этом есть все недостатки, на которые указал Стивен, и, вероятно, больше, потому что я сам не очень хороший кодер. Просто должен делать то, что вы хотите, если вы хотите действительно быстро что-то взломать.