我的主类包含这些代码行。(还有一个将文件添加到播放列表的 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)的原因是什么?我该如何解决?