持续时间(以秒为单位)始终返回0

时间:2017-12-30 11:54:46

标签: java jframe media jfxpanel

我的主类包含这些代码行。 (还有一个将文件添加到播放列表的JButton)

import java.util.List;
import java.util.ArrayList;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javax.swing.DefaultListModel;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;


public class Main {
  public static void main(String[] args){
    MusicPlayerGUI m = new MusicPlayerGUI();
    m.setSize(100,100);
    m.setDefaultCloseOperation(EXIT_ON_CLOSE);
    m.setVisible(true);
 }
}

class MusicPlayerGUI extends JFrame{
static DefaultListModel<String>  model  =  new  DefaultListModel<>();
int currentTrack = 0;
int count=0;
int status = 0;
List<Media> playlist  = new ArrayList<>();
JFXPanel jfx = new JFXPanel();
MediaPlayer mp; 
javax.swing.JButton btnAdd = new javax.swing.JButton("add");

public MusicPlayerGUI() {
    add(btnAdd);
    btnAdd.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnAddActionPerformed(evt);
        }
    });

} 
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {                                       
    PlaylistManager pm = new PlaylistManager();
    JFileChooser loader = new JFileChooser();
    loader.showOpenDialog(this);
    pm.addSongToPlaylist(loader.getSelectedFile());
}

}

这是管理我的播放列表的另一个类PlaylistManager - 添加,删除播放列表中的文件等操作发生在这里。

public class PlaylistManager extends MusicPlayerGUI{

  public PlaylistManager(){};

  public void addSongToPlaylist(File file){

    Media songToBeAdded = new Media(file.toURI().toString());
    playlist.add(songToBeAdded); //effectively adds a song to the playlist
    MusicPlayerGUI.model.addElement(file.getName());  //adds to the visual model of the playlist (as am UI element)
    System.out.println("Added song: " + file.getName()+" with duration of " +(int)(songToBeAdded.getDuration()).toSeconds());
    count++; //increments count of songs in playlist each time one is added
}

问题是,每次我向播放列表添加歌曲时,持续时间总是读为0。 控制台打印:

  

添加了歌曲:name_of_the_song.mp3,持续时间为0

为什么会这样?它为何无法正确读取持续时间(javafx.util.duration)的原因是什么?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

  

问题在于,每当我将一首歌添加到播放列表中时,   持续时间始终读为0

根据您的代码实现(因为,我不确定哪个文件以及它的持续时间是多少)

您初始化了当前曲目和计数

int currentTrack = 0;
int count=0;

但是,无论何时添加曲目,您只需增加count而不是currentTrack

System.out.println("Added song: " + file.getName()+" with duration of " +(int)(playlist.get(currentTrack).getDuration()).toSeconds());

我不确定,为什么增加count而不是currentTrack,尽管您使用currentTrack来获取当前曲目的持续时间。因此,在每次添加文件后,您的内容都会增长,但由于currentTrack仍为0,您仍然会打印第一个跟踪持续时间。

现在,我假设第一首曲目的持续时间为0,如果没有,那么您应该检查验证您的代码并添加相同的文件。