带有java定时器的Mp3播放器[快进]

带有java定时器的Mp3播放器[快进],java,timer,mp3,Java,Timer,Mp3,我正在我的Mp3播放器中制作快进按钮。我已经为此编写了代码,但如何实现向前跳5%的计时器有问题吗?我的意思是,当我按下按钮时,计时器应该向前跳5%的长歌。这是我的快进方法 public void FastForward(){ try { //songTotalLength = fis.available(); fis.skip((long) ((songTotalLength * 0.05))); } catch (

我正在我的Mp3播放器中制作快进按钮。我已经为此编写了代码,但如何实现向前跳5%的计时器有问题吗?我的意思是,当我按下按钮时,计时器应该向前跳5%的长歌。这是我的快进方法

public void FastForward(){
        try {
            //songTotalLength = fis.available();
            fis.skip((long) ((songTotalLength * 0.05)));
        } catch (IOException e) {
            e.printStackTrace();
        }
    } 
下面是按钮方法:

private void jButton3ActionPerformed(ActionEvent e) {
        mp3.FastForward();
        if(mp3.player.isComplete()){
            bar = 100;
        }
        jProgressBar1.setValue((int)bar);
        bar+=5;
    }
这个是计时器:

private void setTime(float t) {  
        int mili = (int) (t / 1000);
        int sec = (mili / 1000) % 60;
        int min = (mili / 1000) / 60;
        start.set(Calendar.MINUTE, 0);
        start.set(Calendar.SECOND, 0);
        end.set(Calendar.MINUTE, 0 + min);
        end.set(Calendar.SECOND, 0 + sec);
        timer = new javax.swing.Timer(1000, new TimerListener());
        percent = (float)100/(min*60+sec);
    }

您已经在两个变量
fis
bar
中冗余跟踪进度。为了更好的设计,使用其中一个来确定经过的时间,而不是为了同样的目的使用另一个变量

但如何实现定时器向前跳5%有问题吗

你似乎弄错了计时器的用途。根据报告,它:

以指定的间隔激发一个或多个ActionEvents

因此,计时器并不是用来记录经过了多少时间。它只需在配置时每秒调用
TimerListener的
actionPerformed(ActionEvent)
方法一次(每1000毫秒一次)

要获得更完整的答案,请发布
TimerListener
课程的代码

注释

  • 您的
    setTime(float)
    方法似乎是要重复调用的,因此此方法不应初始化
    计时器
    变量。而是初始化计时器一次,让它自己去做它的工作

  • 我假设您希望提供的
    float
    参数
    t
    表示

  • float
    数据类型只有7位精度。这可能很好,因为您只对分钟和秒感兴趣,否则float在失去准确性之前只适用于大约四个月的秒

  • 您似乎希望您的按钮单击处理程序执行此操作(增量
    bar
    更快):


你用什么课来播放MP3?
private void jButton3ActionPerformed(ActionEvent e) {
  mp3.FastForward();
  bar+=5; // increment bar before checking complete, and before setting progress
  if(mp3.player.isComplete()){
    bar = 100;
  }
  jProgressBar1.setValue((int)bar);
}