JSpinner gibt leeren Wert zurück

positiv

Mitglied
Hallo zusammen,

ich habe ein Programm mit 2 JSpinner die beide Zahlen haben. der eine funktioniert auch einwandfrei, bei dem anderen wird mir im Debug Modus der Rückgabewert "null" angezeigt und dadurch startet das programm auch nicht, da ich im Laufe des programms noch einen ChangeListener habe der den Wert des JSpinners in ein int umwandelt.

Java:
JSpinner laenge;  
JSpinner anzahl;

int laenge2 = 8;
int anzahl2 = 3;

laenge = new JSpinner();
laenge.addChangeListener(this);
laenge.setValue(laenge2);
      
anzahl = new JSpinner();
anzahl.addChangeListener(this);
anzahl.setValue(anzahl2);

laenge2 = Integer.valueOf(laenge.getValue().toString()).intValue();
anzahl2 = Integer.valueOf(anzahl.getValue().toString()).intValue();

bei laenge funktioniert alles, nur bei anzahl gibt er mir dann eine NullPointerException. Meine Frage deshalb wie bekomme ich bei anzahl einen Wert?
 
Java:
public class Starten extends JFrame implements ActionListener, ChangeListener
{
    PWgen pwgen = new PWgen();
   
    JPanel panelButton;
    JPanel panelPasswoerter;
    JPanel panelHaken;
    JPanel panelAnzahl;
    JButton ok;
    JCheckBox gross;
    JCheckBox klein;
    JCheckBox zahlen;
    JCheckBox sonder;
    JTextArea passwort;
    JSpinner laenge;
    JSpinner anzahl;
    JScrollPane scrollPaneTA;
   
    boolean gbu;
    boolean kbu;
    boolean zah;
    boolean son;
    int laengePW = 8;
    int anzahlPW = 8;
    int einrücken;
    int schriftgroesse = 13;
    int zeilen;
    int spalten = laengePW;
    Object test;
   
    public Starten()
    {
        panelButton = new JPanel();
        panelPasswoerter = new JPanel();
        panelHaken = new JPanel();
        panelAnzahl = new JPanel();
       
        ok = new JButton("Passwort erzeugen");
        ok.addActionListener(this);
       
        gross = new JCheckBox("Großbuchstaben");
        klein = new JCheckBox("Kleinbuchstaben");
        zahlen = new JCheckBox("Zahlen");
        sonder = new JCheckBox("Sonderzeichen");
        gross.addActionListener(this);
        klein.addActionListener(this);
        zahlen.addActionListener(this);
        sonder.addActionListener(this);
   
        passwort = new JTextArea(zeilen, spalten);
        passwort.setFont(new Font("Arial", Font.PLAIN, schriftgroesse));
        passwort.setLineWrap(true);
        passwort.setWrapStyleWord(true);
        passwort.setEditable(false);
        passwort.setBackground(this.getBackground());
       
        laenge = new JSpinner();
        laenge.addChangeListener(this);
        laenge.setValue(laengePW);
       
        anzahl = new JSpinner();
        anzahl.addChangeListener(this);
        anzahl.setValue(anzahlPW);
       
        scrollPaneTA = new JScrollPane(passwort);
        scrollPaneTA.setVisible(false);
       
        panelButton.add(ok);
        panelHaken.add(gross);
        panelHaken.add(klein);
        panelHaken.add(sonder);
        panelHaken.add(zahlen);
        panelPasswoerter.add(scrollPaneTA);
        panelAnzahl.add(laenge);
        panelAnzahl.add(anzahl);
       
        this.add(panelPasswoerter, BorderLayout.CENTER);
        this.add(panelButton, BorderLayout.SOUTH);
        this.add(panelAnzahl, BorderLayout.WEST);
        this.add(panelHaken, BorderLayout.NORTH);
       
        this.setSize(600, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
   
    public static void main(String[] args)
    {
        Starten s = new Starten();
       
        s.setVisible(true);   
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == ok)
        {
            zeilen = 185;
            einrücken = laengePW * 12;
           
            scrollPaneTA.setVisible(true);
           
            scrollPaneTA.setBounds(200, 5, einrücken, zeilen);
           
            if(pwgen.HakenGesezt(gbu, kbu, zah, son) == false)
            {
                passwort.setText("Bitte Haken auswählen");
            }else{
                passwort.setBackground(Color.WHITE);
                pwgen.mehrerePW(anzahlPW, laengePW, gbu, kbu, zah, son);
                passwort.setText(pwgen.getPw());
            }
        }
       
        if(gross.isSelected()) gbu = true; else gbu = false;
        if(klein.isSelected()) kbu = true; else kbu = false;
        if(zahlen.isSelected()) zah = true; else zah = false;
        if(sonder.isSelected()) son = true; else son = false;
    }

    @Override
    public void stateChanged(ChangeEvent e)
    {
        laengePW = Integer.valueOf(laenge.getValue().toString()).intValue();
       
        anzahlPW = Integer.valueOf(anzahl.getValue().toString()).intValue();
    }
}

Exception in thread "main" java.lang.NullPointerException
at gui.Starten.stateChanged(Starten.java:135)
at javax.swing.JSpinner.fireStateChanged(Unknown Source)
at javax.swing.JSpinner$ModelListener.stateChanged(Unknown Source)
at javax.swing.AbstractSpinnerModel.fireStateChanged(Unknown Source)
at javax.swing.SpinnerNumberModel.setValue(Unknown Source)
at javax.swing.JSpinner.setValue(Unknown Source)
at gui.Starten.<init>(Starten.java:68)
at gui.Starten.main(Starten.java:97)

Danke vorab schonmal für die Hilfe.
 
Das liegt daran, daß du die setValue() Methode aufrufst nachdem du bereits den ChangeListener gesetzt hast. setValue() löst ein ChangeEvent aus.
 

Zurück
Oben