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:
Und hier mein Quelltext zu der Klasse (noch sehr unübersichtlich, aber bin ja noch Anfänger):
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
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