NullPointerException和NoSuchElementException

时间:2013-10-11 18:58:15

标签: java exception audio

我收到此错误

java.lang.NullPointerException
    at MidiPlayer.add_midi_files(MidiPlayer.java:59)
    at MidiPlayer.main(MidiPlayer.java:51)
Songs added!
Starting to play
Exception in thread "main" java.util.NoSuchElementException
    at java.util.LinkedList.removeFirst(LinkedList.java:268)
    at java.util.LinkedList.remove(LinkedList.java:683)
    at MidiPlayer.play_next_song(MidiPlayer.java:31)
    at MidiPlayer.start_playing(MidiPlayer.java:47)
    at MidiPlayer.main(MidiPlayer.java:54)

来自这些方法

public static void main(String[] args){
    Queue<String> song_queue = new LinkedList<String>();
    MidiPlayer.add_midi_files(song_queue,new File( "C:\\Users\\Kyle\\Desktop\\clieent\\Client\\cache\\Music\\runescape-7th realm.mid"));
    System.out.println("Songs added!");
    MidiPlayer player = new MidiPlayer(song_queue);
    player.start_playing();
};

public static void add_midi_files(Queue<String> queue, File top_dir){
    try {
        for (File f: top_dir.listFiles())
            if (f.isDirectory())
                add_midi_files(queue, f);
            else if (f.isFile() && f.getName().matches(".*midi?"))
            {
                System.out.println(f);
                queue.add(f.getAbsolutePath());
            }
            else
            {}
        //System.out.printf("%s doesn't match!", f.getName());
    } catch (NullPointerException e) {
        e.printStackTrace();
    }
}

老实说,我不明白问题是什么,任何人都可以帮助我吗?

赞赏正确方向的任何提示

如果您需要,这是整个课程,http://pastebin.com/0hVw83zn

1 个答案:

答案 0 :(得分:4)

File#listFiles()可以返回null。请参阅javadoc

  

如果此抽象路径名不表示目录,则返回null,或   如果发生I / O错误。

您的catch语句会吞下NullPointerException,然后

player.start_playing();

尝试从Queue获取并失败。