[Java] Komischer Fehler bei Loginfenster

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von PeaceMan, 3. Oktober 2007 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 3. Oktober 2007
    Komischer Fehler bei Loginfenster

    Hallo,

    Ich habe hier ein kleines Programm geschrieben, dass ein Login Fenster darstellen soll. Es enthält ein JPasswordField und einen JButton. Mein Ziel war , dass wenn man entweder im Passwortfeld auf 'enter' oder auf den Button drückt sich ein neues Fenster öffnet.

    Wenn man 'enter' drückt funktioniert es wunderbar, doch wenn man auf den Button drückt erhalte ich folgende Ausgabe:

    Code:
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JButton cannot be cast to javax.swing.JPasswordField
     at MainFrame$3.actionPerformed(MainFrame.java:72)
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
     at java.awt.Component.processMouseEvent(Component.java:6038)
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
     at java.awt.Component.processEvent(Component.java:5803)
     at java.awt.Container.processEvent(Container.java:2058)
     at java.awt.Component.dispatchEventImpl(Component.java:4410)
     at java.awt.Container.dispatchEventImpl(Container.java:2116)
     at java.awt.Component.dispatchEvent(Component.java:4240)
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
     at java.awt.Container.dispatchEventImpl(Container.java:2102)
     at java.awt.Window.dispatchEventImpl(Window.java:2429)
     at java.awt.Component.dispatchEvent(Component.java:4240)
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
    
    Hier der Quellcode vom Programm:
    Code:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class MainFrame extends JFrame {
     // Anfang Variablen
     private JLabel picLabel = new JLabel();
     private JLabel logLabel = new JLabel();
     private JButton jButton1 = new JButton();
     // Ende Variablen
    
     public MainFrame(String title) {
     // Frame-Initialisierung
     super("Welcome");
     addWindowListener(new WindowAdapter() {
     public void windowClosing(WindowEvent evt) { System.exit(0); }
     });
     int frameWidth = 640;
     int frameHeight = 415;
     setSize(frameWidth, frameHeight);
     Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
     int x = (d.width - getSize().width) / 2;
     int y = (d.height - getSize().height) / 2 ;
     setLocation(x, y);
     Container cp = getContentPane();
     cp.setLayout(null);
     // Anfang Komponenten
     picLabel.setBounds(0,0,640,415);
     picLabel.setIcon(new ImageIcon("images/tee_main.jpg"));
     cp.add(picLabel);
    
     JLabel jlbPassword = new JLabel("Enter the password: ");
     jlbPassword.setBounds(110,300,150,25);
     jlbPassword.setForeground(Color.WHITE);
     final JPasswordField jpwName = new JPasswordField(10);
     jpwName.setBounds(250,300,140,25);
     jpwName.setEchoChar('•');
     jpwName.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     JPasswordField input = (JPasswordField)e.getSource();
     char[] password = input.getPassword();
     if (isPasswordCorrect(password)) {
     JOptionPane.showMessageDialog(null, "Richtig.");
     new TestFrame("TestFrame");
     dispose();
    
     } else {
     JOptionPane.showMessageDialog(null, "Leider falsch.",
     "Error Message", JOptionPane.ERROR_MESSAGE);
     jpwName.selectAll(); 
     }
     }
     });
    
    
     picLabel.add(jlbPassword);
     picLabel.add(jpwName);
    
     jButton1.setBounds(420, 300, 65, 25);
     jButton1.setText("Login");
     picLabel.add(jButton1);
     jButton1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) {
     JPasswordField input = (JPasswordField)evt.getSource();
     char[] password = input.getPassword();
     if (isPasswordCorrect(password)) {
     JOptionPane.showMessageDialog(null, "Richtig.");
     new TestFrame("TestFrame");
     dispose();
    
     } else {
     JOptionPane.showMessageDialog(null, "Leider falsch.",
     "Error Message", JOptionPane.ERROR_MESSAGE);
     jpwName.selectAll(); //siehe oben.
     }
    
     }
     });
    
     // Ende Komponenten
    
     setResizable(false);
     setVisible(true);
     }
    
     // Anfang Ereignisprozeduren
     
     private static boolean isPasswordCorrect(char[] inputPassword) {
     char[] actualPassword = {'t', 'e', 's', 't'};
     if (inputPassword.length != actualPassword.length){
     return false;
     }
     for (int i = 0; i < inputPassword.length; i ++){
     if (inputPassword[i] != actualPassword[i]){
     return false;
     }
     }
     return true;
     }
    
     // Ende Ereignisprozeduren
    
     public static void main(String[] args) {
     new MainFrame("MainFrame");
     }
    }
    

    Was habe ich falsch gemacht ?



    lg,

    PeaceMan
     
  2. 3. Oktober 2007
    AW: Komischer Fehler bei Loginfenster

    Moin
    Das Problem liegt in der Behandlung des Events von dem Button....
    Code:
     public void actionPerformed(ActionEvent evt) {
     JPasswordField input = (JPasswordField)evt.getSource();
     //usw...
    Du hast übersehen, dass das Event vom Button kommt und insofern ja nicht das Textfeld ist.

    Schreib stattdessen doch einfach:
    Code:
    JPasswordField input = jpwName;
     
  3. 4. Oktober 2007
    AW: Komischer Fehler bei Loginfenster

    Danke vielmals! Es funktioniert
     
  4. 4. Oktober 2007
    AW: Komischer Fehler bei Loginfenster

    [X] Erledigt.

    ~closed~

    Mfg,

    Kolazomai
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.