Frohe Weihnachten!
Ich habe mal wieder ein mehr oder weniger kleines Problem mit den NullPointerExceptions. Um's kurz zu machen, ich kriege von einer Test-UNit immer folgende Fehlermeldung:
Ich schätze, dass er die Playlist nicht erstellen kann. Könnte das sein?
Mein Code dafür:
Die main:
Die beiden InnerClasses:
Und hier der ganze Konstruktor:
Sieht jemand woran's liegt?
Muss ich die JLabels irgendwie erst initiieren? Wenn ja, wie?
Was muss ich mit den JButtons machen?
Und warum erkennt er die inneren Klassen nicht als Threads an??
Vielleicht kann mir da jemand helfen... Wäre super!
Gruss
Ich habe mal wieder ein mehr oder weniger kleines Problem mit den NullPointerExceptions. Um's kurz zu machen, ich kriege von einer Test-UNit immer folgende Fehlermeldung:
Code:
++++ Testklasse: studiplayer.ui.PlayerTest ++++
..E.E.F
Time: 1,852
There were 2 errors:
1) testConstructor(studiplayer.ui.PlayerTest)java.lang.NullPointerException
at studiplayer.ui.PlayListEditor.<init>(PlayListEditor.java:87)
at studiplayer.ui.Player.<init>(Player.java:31)
at studiplayer.ui.PlayerTest.testConstructor(PlayerTest.java:62)
2) testButtons(studiplayer.ui.PlayerTest)java.lang.NullPointerException
at studiplayer.ui.PlayListEditor.<init>(PlayListEditor.java:87)
at studiplayer.ui.Player.<init>(Player.java:31)
at studiplayer.ui.PlayerTest.testButtons(PlayerTest.java:104)
There was 1 failure:
1) testInnerClasses(studiplayer.ui.PlayerTest)junit.framework.AssertionFailedError: Innere Klasse ist kein Thread
at studiplayer.ui.PlayerTest.testInnerClasses(PlayerTest.java:282)
Ich schätze, dass er die Playlist nicht erstellen kann. Könnte das sein?
Mein Code dafür:
Die main:
Code:
public static void main(String args[])
{
PlayList list;
if(args.length > 0)
list = new PlayList(args[0]);
if((new File(DEFAULT_PLAYLIST)).exists())
list = new PlayList(DEFAULT_PLAYLIST);
else
list = new PlayList();
Player test = new Player(list);
test.setVisible(true);
}
Die beiden InnerClasses:
Code:
private class PlayerThread extends Thread
{
public void run()
{
while(!stopped)
{
try
{
playList.getCurrentAudioFile().play();
}
catch(NotPlayableException e)
{
e.printStackTrace();
}
songDescription.setText(playList.getCurrentAudioFile().toString());
setTitle(playList.getCurrentAudioFile().toString());
}
}
private PlayerThread()
{
}
}
private class TimerThread extends Thread
{
public void run()
{
while(!stopped)
{
try
{
playTime.setText(playList.getCurrentAudioFile().getFormattedPosition());
}
catch(NotPlayableException e1)
{
e1.printStackTrace();
}
try
{
Thread.sleep(1000L);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
private TimerThread()
{
}
}
Und hier der ganze Konstruktor:
Code:
public Player(PlayList pl){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
e.printStackTrace();
}
songDescription = new JLabel();
playTime = new JLabel();
editorVisible = false;
stopped = true;
playListEditor = new PlayListEditor(this, playList);
playList = pl;
play = new JButton(new ImageIcon("play.png"));
pause = new JButton(new ImageIcon("pause.png"));
next = new JButton(new ImageIcon("next.png"));
stop = new JButton(new ImageIcon("stop.png"));
pl_editor = new JButton(new ImageIcon("pl_editor.png"));
// (k)
play.addActionListener(this);
pause.addActionListener(this);
stop.addActionListener(this);
next.addActionListener(this);
pl_editor.addActionListener(this);
play.setActionCommand("AC_PLAY");
stop.setActionCommand("AC_STOP");
pause.setActionCommand("AC_PAUSE");
next.setActionCommand("AC_NEXT");
pl_editor.setActionCommand("AC_EDITOR");
JPanel oben = new JPanel();
JPanel unten = new JPanel();
oben.add(songDescription, BorderLayout.NORTH);
oben.add(playTime, BorderLayout.NORTH);
unten.add(play, BorderLayout.SOUTH);
unten.add(pause, BorderLayout.SOUTH);
unten.add(stop, BorderLayout.SOUTH);
unten.add(next, BorderLayout.SOUTH);
unten.add(pl_editor, BorderLayout.SOUTH);
next.setEnabled(true);
pl_editor.setEnabled(true);
play.setEnabled(true);
pause.setEnabled(false);
stop.setEnabled(false);
// (f) letzter pkt
if(playList.isEmpty())
{
songDescription.setText("");
setTitle("");
} else
{
songDescription.setText(playList.getCurrentAudioFile().toString());
setTitle(playList.getCurrentAudioFile().toString());
}
this.pack();
this.setVisible(true);
}
Sieht jemand woran's liegt?
Muss ich die JLabels irgendwie erst initiieren? Wenn ja, wie?
Was muss ich mit den JButtons machen?
Und warum erkennt er die inneren Klassen nicht als Threads an??
Vielleicht kann mir da jemand helfen... Wäre super!
Gruss