java - 无法播放播放列表中的所有歌曲

标签 java javafx mp3 playlist scenebuilder

所以我正在用javafx制作一个mp3播放器,它有一个ListView,我可以在其中拖放歌曲,然后选择一首歌曲并按播放键来播放它,你明白了。 问题是,使用我当前的代码,我无法播放超过两首歌曲的序列:/(播放选定的歌曲,播放旁边的歌曲,然后停止)。 代码如下:

public class MainController implements Initializable {

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        list.setItems(tracklist);
    }

    private MediaPlayer player;
    private Duration pausetime = null;
    private int i;

    ObservableList<String> tracklist = FXCollections.observableArrayList();
    ArrayList<File> playlist = new ArrayList<File>();
    ArrayList<MediaPlayer> players = new ArrayList<MediaPlayer>();

    @FXML
    private Slider slider;

    @FXML
    private Button open;

    @FXML
    private Label csong;

    @FXML
    private ListView<String> list;

    public void getsongfromlist(){
        i = list.getSelectionModel().getSelectedIndex();
    }

    public void slide(int a){
        slider.setMin(0.0);
        slider.setValue(0.0);

        player.currentTimeProperty().addListener(new ChangeListener<Duration>(){

            @Override
            public void changed(ObservableValue<? extends Duration> observableValue, Duration duration,
                    Duration current) {
                // TODO Auto-generated method stub
                slider.setMax(players.get(a).getTotalDuration().toSeconds());
                slider.setValue(current.toSeconds());
            }
        });
    }

    public void move(){
        player.seek(Duration.seconds(slider.getValue()));
    }

    public void play(){              //This is where im getting it wrong
        if (player != null){
            player.stop();
        }
        this.player = players.get(i);
        player.play();
        slide(i);
        csong.setText(playlist.get(i).getName());
        for (int j = 0; j < players.size(); j++){
        player.setOnEndOfMedia(new Runnable(){
            @Override public void run(){
            i++;
            list.getSelectionModel().select(i);
            player = players.get(i);
            player.play();
            slide(i);
            csong.setText(playlist.get(i).getName());
            }
        });
    }
    }

    public void handle(DragEvent event) {
        Dragboard db = event.getDragboard();
        if (db.hasFiles()) {
            event.acceptTransferModes(TransferMode.COPY);
        } else {
            event.consume();
        }
    }

    public void dropped(DragEvent event){
        Dragboard db = event.getDragboard();
        event.acceptTransferModes(TransferMode.COPY);
        boolean success = false;
        if (db.hasFiles()){
            success = true;
            for (File file:db.getFiles()){
                tracklist.add(file.getName());
                playlist.add(file);
                try {
                    final Media media = new Media(file.toURI().toURL().toString());
                    final MediaPlayer set = new MediaPlayer(media);
                    players.add(set);
                } catch (MalformedURLException e) {

                    e.printStackTrace();
                }
            }
        }
        event.setDropCompleted(success);
        event.consume();
    }
}

最佳答案

未测试,但尝试替换

for (int j = 0; j < players.size(); j++){
    player.setOnEndOfMedia(new Runnable(){
        @Override public void run(){
        i++;
        list.getSelectionModel().select(i);
        player = players.get(i);
        player.play();
        slide(i);
        csong.setText(playlist.get(i).getName());
        }
    });
}

player.setOnEndOfMedia(new Runnable(){
    @Override
    public void run() {
        i++ ;
        play();
    }
});

并移动线条

list.getSelectionModel().select(i);

endOfMedia 监听器到 play() 方法的主体。

关于java - 无法播放播放列表中的所有歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29452119/

相关文章:

java - 在 Openshift 中部署应用程序时突然出现问题

java - JavaFX 字体渲染中的错误字符间距(字距调整)(在 Linux 中)

线程 "WindowsNativeRunloopThread"java.lang.NoSuchMethodError : <init> 中的 JavaFX 异常

mp3 文件的 XML 格式

java - 如何重绘多个 JFrame

java - InputStream 不会打开到指定 URL 的流

java - 在java中获取mp3音频信号作为数组

python - discord.py [mp3 @ 000001dc99bec540] 从比特率估计持续时间,这可能不准确

java - 使用带有扩展的泛型的接口(interface)中重写方法的返回类型的意外行为

java - BC 日期、LocalDate 和 DatePicker