当前位置: 首页 > 知识库问答 >
问题:

以秒为单位的持续时间始终返回0

芮歌者
2023-03-14

我的主类包含这些代码行。(还有一个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());
}

}

这是另一个类,playlymanager,它管理我的播放列表,比如从播放列表中添加、删除文件。

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个答案

臧曜瑞
2023-03-14

问题是,每次我将歌曲添加到播放列表时,持续时间总是读取为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,如果不是,那么你应该检查验证你的代码和添加的文件。

 类似资料:
  • 问题内容: 我正在尝试获取报告的构建持续时间,但它始终返回0。 通过阅读文档,阅读Slack插件源以及阅读其他资源,我应该能够执行以下操作之一: 都不起作用。根据我的理解,这可能是因为我在构建实际完成之前就调用了它,因此尚无可用时间。 管道的结构如下所示: 我的问题是: 为什么我没有得到持续时间 管道中是否可以指定“构建后”步骤?从我读到的内容来看,try-catching应该这样工作 我的临时解

  • 在ISO 8601中,持续时间的格式为PT5M(5分钟)或PT2H5M(2小时5分钟)。我有一个JSON文件,其中包含这种格式的值。我想知道spark是否可以提取分钟的持续时间。我尝试将其读取为“DateType”,并使用“minutes”函数获取分钟数,结果返回空值。 示例json 目前,我正在将其作为字符串读取并使用“regex_extract”函数。我想知道一种更有效的方法。 https:/

  • 问题内容: 这段代码在PHP 5.2.5中始终以微秒返回0: 输出: 有任何想法吗? 问题答案: 这似乎可行,尽管http://us.php.net/date记录微秒说明符似乎并不合逻辑,但实际上并不支持它:

  • 问题内容: 我想在用log4j生成的日志文件的每个条目的时间戳中添加微秒,这可能吗? 我已经搜索了官方文档,但是没有提到毫秒以下的单位。 现在我有一个转换模式,如下所示: 在日期转换模式( %d* )中,我想在毫秒值( SSS )之后添加 微秒 ,有没有办法做到这一点? * 问题答案: 如果要显示微秒,则需要自己添加。可以使用自定义格式化程序(而不是PatternFormatter)来完成

  • 问题内容: 在我可以设置例如 是否有任何符号(%something)以毫秒为单位返回当前时间? 问题答案: 没有完全符合您需要的Log4J符号。 以给定的模式返回当前日期,该模式由(放在方括号之间的模式)定义,但是没有给您以毫秒为单位的时间。 给出自 执行开始以来的 毫秒数。 实现所需目标的一种可能方法是扩展Log4j的行为,这要复杂得多,但是如果绝对必要,请按以下步骤进行: 自定义log4j(编

  • 目前,当您获得youtube持续时间时,您会获得类似的内容。 下面的代码将其更改为。然而,我希望只获得SECONDS,因此将是输出。