Длительность в секундах всегда возвращает 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, если нет, то вам следует проверить, проверить ли ваш код и добавил ли он для этого файла.

Другие вопросы по тегам