当前位置: 首页 > 知识库问答 >
问题:

无法播放播放列表上的所有歌曲

柴赞
2023-03-14

所以我用javafx制作了一个mp3播放器,它有一个listview,在这里我拖放歌曲,然后选择一首歌曲并按play播放,你就明白了。问题是,用我当前的代码,我不能播放两首以上歌曲的序列:/(播放选定的歌曲,播放它旁边的歌曲,然后停止)。代码如下:

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();
    }
}

共有1个答案

仲孙文乐
2023-03-14

未测试,但尝试替换

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()方法的主体。

 类似资料:
  • 我是YouTube频道的内容所有者。当我从YouTube网页生成视频报告时,我得到的是304k总视频的结果。但是当我使用YouTube数据API使用此处讨论的方法查询如何使用API v3列出YouTube频道的所有上传视频(URL)时?,我得到的计数较少(~270k)。当我手动查找时,其中一些丢失的视频是从YouTube中删除的视频。 当我查询API时,其他视频丢失的原因可能是什么?是因为它们可能

  • 我已经创建了一个非常简单和基本的html5音频播放器,实际上不超过: 但我面临两个问题,这个简单的音频标签在Chrome上可以使用,但在Safari 7上不行;第二个问题是,它不能在我的iPhone iOS7和HTC Android 2.3上使用

  • 我正在尝试在iOS设备上播放.pls音频流,但它似乎不工作,这是我当前正在做的;

  • 我正在制作音频播放器(android)。问题是我什么时候启动我的应用程序

  • 我想播放一首特定的歌曲取决于发送的参数。 在我的项目中,我有不同的播放列表,所以我想发送参数(它是一个数字,对应一个播放列表),然后只听那个播放列表中的歌曲。有什么想法可以这样做吗?提前道谢!

  • 目前正在开发一个网站,该网站将spotify播放列表及其URI嵌入如下:“https://embedd.spotify.com/?URI=spotify:playlist:4HyauylCBHW9se152noiy0”我想知道是否有一个自动播放参数允许播放列表在加载网页时自动播放? 最后,如果Spotify Web API不允许自动播放播放列表,其他人知道允许自动播放的平台吗?这篇文章提到了Sou