java mp3播放器中播放列表的代码错误

java mp3播放器中播放列表的代码错误,java,mp3,playlist,Java,Mp3,Playlist,我正在努力用Java为我的简单mp3播放器创建一个播放列表,但代码不知何故不起作用。以下是播放列表部分: FileFilter filter = new FileNameExtensionFilter("MP3 Files", "mp3", "mpeg3"); JFileChooser chooser = new JFileChooser("C:\\Users\\Junior\\Music"); chooser.addChoosableFileFilter(filter); chooser.se

我正在努力用Java为我的简单mp3播放器创建一个播放列表,但代码不知何故不起作用。以下是播放列表部分:

FileFilter filter = new FileNameExtensionFilter("MP3 Files", "mp3", "mpeg3");
JFileChooser chooser = new JFileChooser("C:\\Users\\Junior\\Music");
chooser.addChoosableFileFilter(filter);
chooser.setMultiSelectionEnabled(true);

int returnVal = chooser.showOpenDialog(null);

if(returnVal == JFileChooser.APPROVE_OPTION){
    //File myFile=chooser.getSelectedFile();
    File[] files=chooser.getSelectedFiles();
    //String song=myFile+"";
    for(int i=0; i<files.length;i++){
    name=files[i].getName()+"";//getting song name for display purpose
    try {
        MC.Stop();//stopping if any file is playing

        display.setText(name.substring(0,name.length()-4));//setting name songs in display (without .mp3)


        MC.Play(files[i]+"");//from main class i'm calling play method
    } catch (IOException e) {//i'm not really catching any exceptions so...

    }//end of catch
    }//end of for-loop
}//end of if
FileFilter-filter=newfilenameextensionfilter(“MP3文件”、“MP3”、“mpeg3”);
JFileChooser chooser=新的JFileChooser(“C:\\Users\\Junior\\Music”);
chooser.addChoosableFileFilter(过滤器);
选择器。setMultiSelectionEnabled(真);
int returnVal=chooser.showOpenDialog(null);
if(returnVal==JFileChooser.APPROVE_选项){
//File myFile=chooser.getSelectedFile();
File[]files=chooser.getSelectedFiles();
//String song=myFile+“”;

对于(int i=0;i我认为这可能有助于您阅读评论。这是我创建的播放列表类。它是一个抽象类,因此您需要创建自己的类来扩展该类,并实现
loadSongs
方法

public abstract class Playlist {

    public static final int LOOP_NONE = 0;
    public static final int LOOP_PLAYLIST = 1;
    public static final int LOOP_SONG = 2;

    private List<File> songs;
    private int playlistPos;
    private int loopMode;
    private boolean isShuffled;


    public Playlist() {
        isShuffled = false;
        loopMode = 0;
    }


    protected abstract List<File> loadPlaylist();


    public void initPlaylist() {
        songs = loadPlaylist();
    }


    public File getCurrentSong() {
        return songs.get(playlistPos);
    }


    public int getPlaylistPosition() {
        return playlistPos;
    }


    public void setPlaylistPosition(int playlistPos) {
        this.playlistPos = playlistPos;
    }


    public int getPlaylistSize() {
        return songs.size();
    }


    public boolean isFinalSong() {
        return playlistPos == songs.size() - 1;
    }


    public boolean isShuffled() {
        return isShuffled;
    }


    public int getLoopMode() {
        return loopMode;
    }


    public void toggleShuffle() {
        setShuffle(!isShuffled);
    }


    public void toggleLoop() {
        loopMode = (loopMode + 1) % 3;
    }


    public void skipForward() {
        playlistPos = (playlistPos + 1) % songs.size();
        // Re-shuffle songs each time the playlist loops
        if (playlistPos == 0 && isShuffled) {
            shuffle();
        }
    }


    public void skipBack() {
        playlistPos = playlistPos == 0 ? songs.size() - 1 : playlistPos - 1;
    }


    public void setLoop(int loopMode) {
        this.loopMode = loopMode;
    }


    public void setShuffle(boolean shuffle) {
        this.isShuffled = shuffle;
        if (isShuffled) {
            shuffle();
        }
        else {
            unshuffle();
        }
    }


    protected void shuffle() {
        Collections.shuffle(songs.subList(playlistPos + 1, songs.size()));
    }


    protected void unshuffle() {
        initPlaylist();
    }

}

您之所以听到最后一首歌,是因为它会播放其他歌曲,并在for循环找到文件时尽可能快地停止播放。看起来您可能需要一种方法,在播放下一首歌曲之前等待歌曲结束。哦,我没有看到。谢谢!但是您可能知道更多有关如何创建播放列表的信息吗?嘿,非常感谢!我知道创建了一个新类,我在其中编写了代码的第一部分,然后我用代码的第二部分创建了子类(新类)TestPlayList,但当我这样做时,它给了我一个错误:类型列表不带参数。我哪里出错了?你需要导入
java.util.List
,而不是
java.awt.List
,它工作了!只是(真的)还有一件事……你说我必须以列表的形式返回选定的文件。我使用
File[]files=chooser.getSelectedFiles();
获取文件,然后返回
文件;
。但是它给了我一个错误提示
文件[]无法转换为列表。为什么?我真的很感谢你的助手,爱你!哈哈,不用担心。这是因为文件[]是一个数组,但我们需要一个列表。所以,你应该尝试
返回数组。toList(文件)
Heya这次没有给我一个错误,但它不能正常工作。如果我选择多个文件,它只播放我第一首选择的歌曲,就这样。我按照你说的做了所有事情,但仍然不能工作。我必须手动更改,当歌曲完成后,它将播放列表上的下一首歌曲吗?是的,很抱歉,我太笨了,但我没有java现在已经是第二年了,我知道的不多。
public TestPlaylist extends Playlist {

    @Override
    protected List<File> loadPlaylist() {
        // Show your file chooser, and return the selected files
        // as a list.
    }
}
Playlist playlist = new TestPlaylist();
playlist.initPlaylist();

// Do what you want with it, for example:
playlist.setShuffle(true);
MC.play(playlist.getCurrentSong().getAbsolutePath());