持续时间(秒)始终返回0

问题描述 投票:-3回答:1

我的主类包含这些代码行。 (还有一个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)?我该如何解决这个问题?

java jframe media jfxpanel
1个回答
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,如果没有,那么你应该检查验证你的代码并添加相同的文件。

© www.soinside.com 2019 - 2024. All rights reserved.