Methoden if-statement error, FX, Fehlermeldung

Diskutiere if-statement error, FX, Fehlermeldung im Java Basics - Anfänger-Themen Bereich.
B

ben-reisinger

Guten Tag, ich habe ein Problem bei meinem ersten Programm: ein LogIn GUI mit ein paar simplen Funktionen - siehe https://www.java-forum.org/thema/methoden-haben-kein-zugriff-auf-variablen.189333/#post-1231244
Das Problem in dem Post habe ich durch die Hilfe lösen können - nun kommt das nächste.

Ich probiere etwas mit einem RadioButton --> Wenn ich auf den LogIn - Button drücke soll überprüft werden, ob ich die "AGB's" akzeptiert habe oder nicht: Ist der RadioButton ausgewählt, ja oder nein ?

Java:
public void LoginButton() {
        pWordEingabe = passwordField.getText();        // Passwort und Benutzername in dem String speichern
        uNameEingabe = textField.getText();       
        System.[B][I]out[/I][/B].println("Login gedrückt!");
        System.[B][I]out[/I][/B].println("----------------");
        System.[B][I]out[/I][/B].println("Benutzername eingegeben: " + uNameEingabe);    // Daten ausgeben - für die Überprüfung
        System.[B][I]out[/I][/B].println("Passwort eingegeben: " + pWordEingabe);
        Policy();                                                // In der Policy Methode wird einfach nur ein System.out.println(...), wenn es angeklickt ist oder nicht
        System.[B][I]out[/I][/B].println("________________");   

            if (PolicyAccepted.isSelected() == true) {
            PolicyYes = true;
        } else {
            PolicyYes = false;
        }
}
So und immer, wenn ich ausführe klappt alles, bis ich den RadioButton drücke --> eine Fehlermeldung
--> alle anderen Funktionen gehen bis dahin


Meine Fragen:
a) Wie löse ich das beschriebene Problem ?
b) Wie kommt man auf die Lösung, ohne ein Post schreiben zu müssen, bei Fehlermeldungen solcher Art?

Die Fehlermeldung:
Code:
[SIZE=2]java.lang.NullPointerException
    at loginGUi.LoginButton(loginGUi.java:111)
    at loginGUi.lambda$0(loginGUi.java:64)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6635)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6400)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
[/SIZE]
 
H

httpdigest

Es hilft einfach, Exceptions bzw. deren Stacktraces lesen zu können.
Code:
java.lang.NullPointerException
    at loginGUi.LoginButton(loginGUi.java:111)   <---- also Klasse "loginGUi", Methode "LoginButton" in Datei "loginGUI.java" in Zeile 111
    ...
Hier wird dir ganz genau gesagt, in welcher Zeile auf eine null-Variable zugegriffen wurde. Und wenn du ab Java 14 verwendest, dann steht in der NullPointerException Message sogar die (Sub)-expression, die zu null ausgewertet wurde.
 
J

JustNobody

Könntest Du die ganze Klasse zeigen?

Du kannst aber auch Zeile 111 der loginGUi Klasse prüfen - da greifst Du auf eine Variable zu, die null ist, vermutlich PolicyAccepted.

Generell evtl. auf die Java Benennung achten:
Groß-/Kleinschreibung:
Klassen starten mit einem Großbuchstaben und sind dann PascalCase: Statt loginGUi also LoginGui oder LoginGUI
Methoden sind camelCase: Statt LoginButton also loginButton
Variablen sind camelCase: Statt PolicyAccepted also policyAccepted

Dann sollten die Namen so gewählt sein, dass gut erkennbar ist, was passiert. Also bei Methoden hat man in der Regel ein Verb mit dabei. handleLoginButtonClick oder so wäre dann deutlich besser.
 
B

ben-reisinger

Könntest Du die ganze Klasse zeigen?

Du kannst aber auch Zeile 111 der loginGUi Klasse prüfen - da greifst Du auf eine Variable zu, die null ist, vermutlich PolicyAccepted.

Generell evtl. auf die Java Benennung achten:
Groß-/Kleinschreibung:
Klassen starten mit einem Großbuchstaben und sind dann PascalCase: Statt loginGUi also LoginGui oder LoginGUI
Methoden sind camelCase: Statt LoginButton also loginButton
Variablen sind camelCase: Statt PolicyAccepted also policyAccepted

Dann sollten die Namen so gewählt sein, dass gut erkennbar ist, was passiert. Also bei Methoden hat man in der Regel ein Verb mit dabei. handleLoginButtonClick oder so wäre dann deutlich besser.

Ich verstehe es irgendwie nicht ganz genau, PolicyAccepted habe ich eigentlich genau Definiert. Hier mal der ganze Code - nehme gerne Optimierungsvorschläge an :)

Java:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JLabel;

public class loginGUi {

    private JFrame frame;
    private JTextField textField;
    private JPasswordField passwordField;
    private JRadioButton PolicyAccepted;
    
    private String uNameEingabe;
    private String pWordEingabe;
    private boolean eingabeKorrekt;
    private boolean PolicyYes;
    
    

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    loginGUi window = new loginGUi();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public loginGUi() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        
        JButton LoginButton = new JButton("Log In ");
        LoginButton.setBounds(291, 70, 117, 113);
        frame.getContentPane().add(LoginButton);
        LoginButton.addActionListener(e -> LoginButton());
        
        textField = new JTextField();
        textField.setBounds(123, 70, 130, 26);
        frame.getContentPane().add(textField);
        textField.setColumns(10);
        
        passwordField = new JPasswordField();
        passwordField.setBounds(123, 157, 130, 26);
        frame.getContentPane().add(passwordField);
        
        JRadioButton PolicyAccepted = new JRadioButton("Policy");
        PolicyAccepted.setBounds(291, 195, 141, 23);
        frame.getContentPane().add(PolicyAccepted);
        PolicyAccepted.setSelected(false);
        PolicyAccepted.addActionListener(e -> Policy());
        
        
        
        
        
        
        
        
        
        JLabel uNameLabel = new JLabel("Username:");
        uNameLabel.setBounds(6, 70, 105, 16);
        frame.getContentPane().add(uNameLabel);
        
        JLabel passwordLabel = new JLabel("Password:");
        passwordLabel.setBounds(6, 162, 105, 16);
        frame.getContentPane().add(passwordLabel);
        
        JLabel LabelLogin = new JLabel("Log In");
        LabelLogin.setBounds(192, 6, 61, 16);
        frame.getContentPane().add(LabelLogin);
    }

    public void LoginButton() {
        pWordEingabe = passwordField.getText();
        uNameEingabe = textField.getText();        
        
        System.out.println("Login gedrückt!");
        System.out.println("----------------");
        System.out.println("Benutzername eingegeben: " + uNameEingabe);
        System.out.println("Passwort eingegeben: " + pWordEingabe);
        Policy();
        if (PolicyAccepted.isSelected() == true) {
            PolicyYes = true;
        } else {
            PolicyYes = false;
        }
        
    }
    
    
    public void Policy() {
        if (PolicyYes == true) {
            System.out.println("AGB");
            
        } else {
            System.out.println("no");
        }
    } 
}
 
F

fhoffmann

Du erzeugtst eine neue lokale Variable und setzt nicht das Member:
Java:
JRadioButton PolicyAccepted = new JRadioButton("Policy");
 
F

fhoffmann

Du hast in der Klasse eine Variable (ein Member) deklariert:
Java:
JRadioButton PolicyAccepted;
In initialize() schreibst du dann:
Java:
JRadioButton PolicyAccepted = new JRadioButton("Policy");
Dadurch erstellst du eine neue lokale Variable mit dem gleichen Namen wie das Member.
Du solltest in initialize() schreiben:
Java:
PolicyAccepted = new JRadioButton("Policy");
 
Thema: 

if-statement error, FX, Fehlermeldung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben