Длительность в секундах всегда возвращает 0
Мой основной класс содержит эти строки кода. (Существует также 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.
Согласно вашей реализации кода (так как, я не уверен, какой файл и какова его продолжительность)
Вы инициализировали текущий трек и считать
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, если нет, то вам следует проверить, проверить ли ваш код и добавил ли он для этого файла.