Von einem JTextField Doublewerte entgegennehmen

Diskutiere Von einem JTextField Doublewerte entgegennehmen im Java Basics - Anfänger-Themen Bereich.
M

MasterShredder

Hallo,

ich will von einem JTextField Doublewerte entgegennehmen. Dabei kommt immer dieser NullPointerException fehler.

Quelltext:

Java:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Gasverbrauchsrechner extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    public JLabel lblAsg;
    public double zustandszahl = 0.94865;
    public double brennwert = 11.290;
    public String eingabe;
    public double doubEingabe = Double.parseDouble(eingabe);
    public double kwh;
    
    
    
    public void verrechnung() {
        kwh = doubEingabe * zustandszahl * brennwert;
    }



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

    /**
     * Create the frame.
     */
    public Gasverbrauchsrechner() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        JLabel lblAsg_1 = new JLabel();
        lblAsg_1.setHorizontalAlignment(SwingConstants.CENTER);
        lblAsg_1.setBounds(108, 172, 225, 19);
        contentPane.add(lblAsg_1);
        
        JButton btnOk = new JButton("OK");
        btnOk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                eingabe = textField.getText();
                verrechnung();
                System.out.println(kwh);   
                
            }
        });
        
        textField = new JTextField();
        textField.setBounds(108, 199, 225, 19);
        contentPane.add(textField);
        textField.setColumns(10);
        btnOk.setBounds(169, 230, 117, 25);
        contentPane.add(btnOk);
    }
}
Fehlermeldung:

Code:
java.lang.NullPointerException
    at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838)
    at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.base/java.lang.Double.parseDouble(Double.java:549)
    at Gasverbrauchsrechner.<init>(Gasverbrauchsrechner.java:22)
    at Gasverbrauchsrechner$1.run(Gasverbrauchsrechner.java:41)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    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(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    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)
Woran kann das liegen habe doch korrekt umgewandelt, oder?

Will mir einen Umrechner bauen für meine Gaswerte m³ in kw/h.

Das Ergebnis soll später in lablAug_1 erscheinen, was ich auch noch nicht hinbekommen habe, auch jetzt nicht bei dieser Lösungsart als String.

MFG
MasterShredder
 
Tarrew

Tarrew

Naja, du hast ein Attribut "eingabe", welches nicht initialisiert wird, also null ist.
Und dann versuchst du den null-Wert in ein Double umzuformen. Das musst du schon im Clicklistener machen und nicht bei der Deklaration des Attributes.

Ich sag mal nichts zum bestehenden Code, den könnte man noch deutlich schöner schreiben, aber vllt. hilft das erstmal:
Java:
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Gasverbrauchsrechner extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    public double zustandszahl = 0.94865;
    public double brennwert = 11.290;
    public double doubEingabe;
    public double kwh;


    public void verrechnung() {
        kwh = doubEingabe * zustandszahl * brennwert;
    }


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

    /**
     * Create the frame.
     */
    public Gasverbrauchsrechner() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblAsg_1 = new JLabel();
        lblAsg_1.setHorizontalAlignment(SwingConstants.CENTER);
        lblAsg_1.setBounds(108, 172, 225, 19);
        contentPane.add(lblAsg_1);

        JButton btnOk = new JButton("OK");
        btnOk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                doubEingabe = Double.parseDouble(textField.getText());
                verrechnung();
                lblAsg_1.setText(kwh + "");

            }
        });

        textField = new JTextField();
        textField.setBounds(108, 199, 225, 19);
        contentPane.add(textField);
        textField.setColumns(10);
        btnOk.setBounds(169, 230, 117, 25);
        contentPane.add(btnOk);
    }
}
 
M

MasterShredder

Sehr cool funktioniert :),

Wie könnte man ihn denn noch schöner schreiben?

Habe hier mal die ver0.1 da wird alles etwas deutlicher.

Java:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Gasverbrauchsrechner extends JFrame {
    
    //Attribute

    private JPanel contentPane;
    private JTextField textField;   
    private double zustandszahl = 0.94865;
    private double brennwert = 11.290;
    private double abzuege = 1750;
    private double doubEingabe;
    private double rchztr;
    private double kwh;
    
    
    //Verrechnung
    
    public void verrechnen() {
        rchztr = doubEingabe - abzuege;
        kwh = rchztr * zustandszahl * brennwert;
    }

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

    /**
     * Create the frame.
     */
    public Gasverbrauchsrechner() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 500, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        //Label Beschriftungen
        
        JLabel lblBakt = new JLabel("Aktueller Stand:");
        lblBakt.setBounds(52, 198, 120, 20);
        contentPane.add(lblBakt);
        
        JLabel lblBstndKwh = new JLabel("Stand in kw/h:");
        lblBstndKwh.setBounds(52, 140, 110, 20);
        contentPane.add(lblBstndKwh);
        
        JLabel lblBrchztr = new JLabel("Rechnungszeitraum:");
        lblBrchztr.setBounds(24, 166, 148, 20);
        contentPane.add(lblBrchztr);
        
        //Label Ausgaben
        
        JLabel lblRchztr = new JLabel("");
        lblRchztr.setBounds(190, 167, 120, 20);
        contentPane.add(lblRchztr);
        
        JLabel lblKwh = new JLabel("");
        lblKwh.setBounds(190, 140, 120, 20);
        contentPane.add(lblKwh);
        
        //Action
        
        textField = new JTextField();
        textField.setBounds(190, 199, 120, 20);
        contentPane.add(textField);
        textField.setColumns(10);
        
        JButton btnNewButton = new JButton("OK");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                doubEingabe = Double.parseDouble(textField.getText());
                verrechnen();
                lblKwh.setText(kwh + "");
                lblRchztr.setText(rchztr + "");
            }
        });
        btnNewButton.setBounds(220, 230, 60, 25);
        contentPane.add(btnNewButton);
    }
}
 
Thema: 

Von einem JTextField Doublewerte entgegennehmen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben