我的主类包含这些代码行。 (还有一个将文件添加到播放列表的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)的原因是什么?我该如何解决这个问题?
答案 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,如果没有,那么您应该检查验证您的代码并添加相同的文件。