Swing label.setText() macht probleme

Bastier

Mitglied
Hallo.

Ich bin momentan ein wenig verzweifelt, weil jedes mal, wenn ich die Methode aufrufe, die ein Label in meinem programm ändern soll, kommt nur eine unverständliche Fehlermeldung in der KOnsole von BlueJ. (Ich muss unbedingt mit BlueJ arbeiten für die Schule).

Hier die Fehlermeldung:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Kaufen.ostseite(Kaufen.java:240)
	at Kaufen.preisberechnung(Kaufen.java:249)
	at Kaufen.kl(Kaufen.java:85)
	at Kaufen.access$100(Kaufen.java:12)
	at Kaufen$3.actionPerformed(Kaufen.java:193)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
	at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:308)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6268)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6033)
	at java.awt.Container.processEvent(Container.java:2045)
	at java.awt.Component.dispatchEventImpl(Component.java:4629)
	at java.awt.Container.dispatchEventImpl(Container.java:2103)
	at java.awt.Component.dispatchEvent(Component.java:4455)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4633)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4297)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4227)
	at java.awt.Container.dispatchEventImpl(Container.java:2089)
	at java.awt.Window.dispatchEventImpl(Window.java:2517)
	at java.awt.Component.dispatchEvent(Component.java:4455)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)
	at java.awt.EventQueue.access$000(EventQueue.java:96)
	at java.awt.EventQueue$1.run(EventQueue.java:608)
	at java.awt.EventQueue$1.run(EventQueue.java:606)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
	at java.awt.EventQueue$2.run(EventQueue.java:622)
	at java.awt.EventQueue$2.run(EventQueue.java:620)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

Und hier mein Quelltext zu der Klasse (noch sehr unübersichtlich, aber bin ja noch Anfänger):

Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;

/**
 * Beschreiben Sie hier die Klasse Kaufen.
 * 
 * @author (Ihr Name) 
 * @version (eine Versionsnummer oder ein Datum)
 */
public class Kaufen
{

    // statische Datenfelder
    private static final String VERSION = "Version 0.2";
    
    // Datenfelder
    private JFrame infofenster;
    private JPanel bedienfeld;
    private Info fpauskunft;
    private JLabel statusLabel;
    private String ziel;
    private int zielp;
    private int klasse;
    private int karte;
    private int endpreis;
    private String text;
    
    
    /**
     * Konstruktor für Objekte der Klasse GUI
     */
    public Kaufen()
    {
        infofensterErzeugen();
        zielp = 25;
        klasse = 1;
        karte = 1;
        endpreis = 25;
        
    }

    /**
     * Ticketautomat beenden
     */
    private void beenden()
    {
        System.exit(0);
    }
    
    /**
     * Ticketautomat öffnen
     */
    private void automatStarten()
    {
        infofenster.setVisible(false);
        new GUI();
    }
    
    /**
     * Kartenauswahl öffnen
     */
    private void info()
    {
        infofenster.setVisible(false);
        new Info();
    }
    
    /**
     * Zielpreisbestimmung
     */
    private void zi(int a)
    {
        zielp = a;
        preisberechnung();
    }
    
    /**
     * Klassenbestimmung
     */
    private void kl(int a)
    {
        klasse = a;
        preisberechnung();
    }
    
    /**
     * Kartentypbestimmung
     */
    private void fahrten(int a)
    {
        karte = a;
        preisberechnung();
    }
    
    
    
    /**
     * Erzeuge ein Swing-Fenster samt Inhalt
     */
     void infofensterErzeugen()
    {
        infofenster = new JFrame("Ticketautomat " + VERSION + " Kartenauswahl");
        infofenster.setPreferredSize(new Dimension(800, 655));
        Container contentPane = infofenster.getContentPane();
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
        
        menuezeileErzeugen(infofenster);
        
        JPanel welcomePanel = new JPanel();
        
        JLabel welcomeLabel = new JLabel();
        ImageIcon welcomeico = new ImageIcon("M:/Modul 8 - Programmierung - Eiden/Projekt GUI/Bsp Ticketautomat/img/welcome.png");
        welcomeLabel.setIcon(welcomeico);
        Dimension d1 = new Dimension(welcomeico.getIconWidth(), welcomeico.getIconHeight());
        welcomeLabel.setPreferredSize(d1);
                welcomePanel.add(welcomeLabel);
        
        JPanel inhalt = new JPanel(new BorderLayout());
        
        JPanel ostseite = new JPanel(new GridLayout(0,1));
        JPanel flowost = new JPanel();
        
        JPanel preisanzeige = new JPanel();
        JLabel gp = new JLabel("Gesamtpreis:");
        ostseite.add(gp);
        JTextField statusLabel = new JTextField("0");
        
        ostseite.add(statusLabel);
        
        JButton best = new JButton("Bezahlen");
        ostseite.add(best);
       
        
        flowost.add(ostseite);
        inhalt.add(flowost, BorderLayout.EAST);
        
        
        JPanel westseite = new JPanel(new GridLayout(0,1));
        JPanel flow = new JPanel();
        
        JLabel label1 = new JLabel("Wohin möchten Sie fahren?");
        westseite.add(label1);
        
        JRadioButton ko = new JRadioButton("Nach Koblenz");
        
        JRadioButton tr = new JRadioButton("Nach Trier");
        ButtonGroup zielbuttons = new ButtonGroup();
        zielbuttons.add(ko);
        zielbuttons.add(tr);
        westseite.add(ko);
        westseite.add(tr);
        
        JLabel label2 = new JLabel("Welche Klasse?");
        westseite.add(label2);
        
        JRadioButton ek = new JRadioButton("1. Klasse");
        JRadioButton zk = new JRadioButton("2. Klasse");
        
        ButtonGroup klassebuttons = new ButtonGroup();
        klassebuttons.add(ek);
        klassebuttons.add(zk);
        westseite.add(zk);
        westseite.add(ek);
        
        JLabel label3 = new JLabel("Ticketart:");
        westseite.add(label3);
        
        JRadioButton ef = new JRadioButton("Einfache Fahrt");
        
        JRadioButton rf = new JRadioButton("Hin- und Rückfahrt");
        JRadioButton wk = new JRadioButton("Wochenkarte");
        JRadioButton mk = new JRadioButton("Monatskarte");
        ButtonGroup ticketbuttons = new ButtonGroup();
        ticketbuttons.add(ef);
        ticketbuttons.add(rf);
        ticketbuttons.add(wk);
        ticketbuttons.add(mk);
        westseite.add(ef);
        westseite.add(rf);
        westseite.add(wk);
        westseite.add(mk);
        
               
        ko.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { zi(25); }
                           });
        tr.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { zi(25); }
                           });
        zk.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { kl(1); }
                           });
        ek.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { kl(2); }
                           });
        ef.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { fahrten(1); }
                           });
        rf.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { fahrten(2); }
                           });
        wk.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { fahrten(5); }
                           });
        mk.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { fahrten(20); }
                           });
                           
        flow.add(westseite);
        inhalt.add(flow, BorderLayout.WEST);
        
        
        
        JPanel buttonLeiste = new JPanel(new GridLayout(1,0));
        JButton backButton = new JButton("Zurück zum Start");
        backButton.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { automatStarten(); }
                           });
        JButton kaufenButton = new JButton("Fahrplaninfo");
        kaufenButton.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { info(); }
                           });
        buttonLeiste.add(backButton);
        buttonLeiste.add(kaufenButton);
        
        contentPane.add(welcomePanel);
        contentPane.add(inhalt);
        contentPane.add(buttonLeiste);
        infofenster.pack();
        infofenster.setVisible(true);
    }
    
    /**
     * Preisfenster erzeugen
     */
    private void ostseite(String text)
    {
        statusLabel.setText(text);
    }
   /**
     * Preisberechnung
     */
    private void preisberechnung()
    {
        endpreis = zielp * klasse * karte;
        text = Float.toString(endpreis);
        ostseite(text);
    }
    
    /**
     *  Methode zum Erzeugen der Menüzeile
     */
    private void menuezeileErzeugen(JFrame fenster)
    {
        final int SHORTCUT_MASK =
            Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();

        JMenuBar menuezeile = new JMenuBar();
        fenster.setJMenuBar(menuezeile);
        
        JMenu menue;
        JMenuItem eintrag;
        
        
        menue = new JMenu("Datei");
        menuezeile.add(menue);
        JMenu aktionsMenue = new JMenu("Aktion");
        menuezeile.add(aktionsMenue);
        
        eintrag = new JMenuItem("Karte kaufen");
        aktionsMenue.add(eintrag);
        
        eintrag = new JMenuItem("Fahrplanauskunft");
        eintrag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, SHORTCUT_MASK));
        eintrag.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { info(); }
                           });
                aktionsMenue.add(eintrag);
        
        eintrag = new JMenuItem("Neu starten");
            eintrag.setAccelerator(KeyStroke.getKeyStroke("F2"));
            eintrag.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { automatStarten(); }
                           });
        menue.add(eintrag);

        menue.addSeparator();

        eintrag = new JMenuItem("Beenden");
            eintrag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));
            eintrag.addActionListener(new ActionListener() {
                               public void actionPerformed(ActionEvent e) { beenden(); }
                           });
        menue.add(eintrag);
    }
    
}

Hat jemand eine Lösung, oder nen Hinweis für mich?? Es geht nur darum, das statusLabel zu verändern, sobald einer der Radiobuttons aktiviert wurde.

Vielen Dank schonmal,

Basti
 
Ohne mir das alles durchzulesen.

1. Google nach der Fehlermeldung
2. Du rufst setText auf einem NULL . Objekt auf.

Gruß,

Martin
 
wie Marcinek schon sagt, die Variable ist "null".

du initalisierst hier nämlich ein eigenes Objekt in der Methode und nicht das Objekt, welches du als Attribut hast:

Java:
   JTextField statusLabel = new JTextField("0");
 
Erstmal vielen Dank euch beiden.

Wenn ich aus
Code:
JTextField statusLabel = new JTextField("0");

Code:
JTextField statusLabel = new JTextField(text);

mache, funktioniert es genausowenig :/

oder muss ich text vorher noch etwas zuweisen?
 
JTextField statusLabel = new JTextField("0"); so erzeugst du eine neue Variable.

Du willst aber dein Attribut der Klasse befüllen :
Java:
    private JLabel statusLabel;

Java:
statusLabel = new JLabel("0");
 
Ich bin so doof 😳 Da sitz ich jetzt seit 3 Tagen dran und war kurz davor, mir das Leben zu nehmen :lol:

Sobald ich die Danke-Funktion hier finde, bekommst du eins :toll:
 

Zurück
Oben