NullPointerException

Cherry07

Mitglied
Hallo,

ich hab da mal ein Problem mit einer NullPointerException. Und zwar zeigt es mir einen Nullpointer bei einem JButton an, wenn ich diesen aktivieren will.

Aufgabenstellung war die folgende:
Es wird eine Ereignisbehandlung durchgeführt. In actionPerformed(ActionEvent e) kann man den auslösenden Knopf über e.getActionCommand() über seine Beschriftung identifizieren. Da man aber Icons statt einer Beschriftung hat, muss man für jeden Knopf im Konstruktor mit setActionCommand() einen Identifikator setzen.

Für play-Knopf wird ein Identifikator "AC_PLAY" verwendet.

Beim Start ist play auf true zu setzen.
Wenn play gedrückt wird, soll pause aktiviert werden.

Und genau bei pause.setEnabled(true) zeigt es mir eine NullPointerException an und ich weiss jetzt leider nicht, wie ich das lösen soll und bin auf eure Hilfe hier angewiesen.

Vielen Dank schonmal im Voraus.
Schönes Wochenende
Cherry07


Code:
private static final String AC_PLAY = "play";
private JButton play;

public Player(PlayList playList)
{
      //...

      JPanel fensterinhalt = new JPanel();
      fensterinhalt.setLayout(new FlowLayout());

      JButton play = new JButton(new ImageIcon("play.png"));
      play.setActionCommand(AC_PLAY);
      play.addActionListener(this);
      fensterinhalt.add(play);

      JButton pause = new JButton(new ImageIcon("pause.png"));
      pause.setActionCommand(AC_PAUSE);
      pause.addActionListener(this);
      fensterinhalt.add(pause);

      pause.setEnabled(false);
      play.setEnabled(true);  

      pack();
      add(fensterinhalt);
      setVisible(true); 
}


Code:
public void actionPerformed(ActionEvent aE)
{
     String cmd = aE.getActionCommand();
        
     //Button-Zustaende 

     if(cmd.equals(AC_PLAY))
     {
          pause.setEnabled(true);       //hier wird der NullPointer angezeigt

          if(playList.getCurrentAudioFile() != null)
          {
               playCurrentSong();
          }
          else
               System.out.println("...");  
     }
    //...
}
 
Zuletzt bearbeitet:

Xandro

- Mistkerl -
Moin,

Du hast vom JButton pause keine Klassenvariable deklariert.
Initialisierung und Deklarierung erfolgen im Konstruktor.
Eigentlich dürfte sich die Klasse gar nicht kompilieren lassen, da in der ActionPerformed-Methode die Variable pause ja gar nicht bekannt ist.

Wenn Du doch eine Klassenvariable hast, scheint auf pause zugegriffen zu werden "bevor" Du diesen JButton überhaupt initialisiert hast.

Gruß,
Xan
 

Cherry07

Mitglied
danke für die schnelle Antwort.
habs jetzt so gemacht, aber funktioniert immer noch nicht.

Code:
public class Player 
extends JFrame
implements ActionListener
{

    private PlayList playList;
    
    private String AC_PLAY;
    private String AC_PAUSE;
    
    private JButton play;
    private JButton pause;


    public Player(PlayList playList)
    {
        this.playList = playList;
        
        AC_PLAY = "play";
        AC_PAUSE = "pause";

        JPanel fensterinhalt = new JPanel();
        fensterinhalt.setLayout(new FlowLayout());

        JButton play = new JButton(new ImageIcon("play.png"));
        play.setActionCommand(AC_PLAY);
        play.addActionListener(this);
        fensterinhalt.add(play);
        play.setEnabled(true);
        
        JButton pause = new JButton(new ImageIcon("pause.png"));
        pause.setActionCommand(AC_PAUSE);
        pause.addActionListener(this);
        fensterinhalt.add(pause);
        pause.setEnabled(false);

        pack();
        add(fensterinhalt);
        setVisible(true); 
    }
  
 
    public void actionPerformed(ActionEvent aE)
    {        
        System.out.println("actionPerformed");
        String cmd = aE.getActionCommand();

        //Button-Zustaende 
        if(cmd.equals(AC_PLAY))
        {
            System.out.println("actionPerformed: play");
            
            pause.setEnabled(true);
            stop.setEnabled(true);
            
            if(playList.getCurrentAudioFile() != null)
            {
                playCurrentSong();
            }
            else
                System.out.println("err: play-click - kein Song in playList");  
        }
        
        else if(cmd.equals(AC_PAUSE))
        {
            System.out.println("actionPerformed: pause");
            pause.setEnabled(true);
            stop.setEnabled(true);
            
            pause.addMouseListener(new MouseAdapter()
            {
                public void mouseClicked(MouseEvent mE)
                {
                    if(playList.getCurrentAudioFile() != null)
                    {
                        if(mE.getClickCount() == 1)
                        {
                            playList.getCurrentAudioFile().togglePause();   
                        }
                        else if (mE.getClickCount() == 2)
                        {
                            playCurrentSong();
                        }
                    }
                    else
                        System.out.println("err: pause-click - kein Song in playList");
                }
            });
        }
}

bei pause.setEnabled(true);
kommt diese Fehlermeldung nachdem ich den play-Button betätige:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at studiplayer.ui.Player.actionPerformed(Player.java:151)
in Zeile 151 steht: pause.setEnabled(true);
 
Zuletzt bearbeitet:

Xandro

- Mistkerl -
Moin,

diese Zeile:
Code:
JButton play = new JButton(new ImageIcon("play.png"));

musst Du abändern in:
Code:
play = new JButton(new ImageIcon("play.png"));

Du erzeugst ein neues Button-Object, obwohl Du die Klassenvariable nutzen sollst.

EDIT:

Hoppla, ich meine natürlich den Pause-Button:

Code:
JButton pause = new JButton(new ImageIcon("pause.png"));
Code:
pause = new JButton(new ImageIcon("pause.png"));

Gruß,
Xan
 
Zuletzt bearbeitet: