用java设计节拍器_java定时执行方法节拍器

最近准备在Android下写一个节拍器,因为不熟悉Android开发的一系列东西,所以想着先用Java写一个节拍器再说。好歹,能把算法弄明白。在节拍器这个定时执行程序中,有两个最重要的类:Timer和TimerTask。

在讲解节拍器算法之前,我们来看一个定时程序的简单例子:

import java.util.Timer;

import java.util.TimerTask;

public class Test {

//因为我们要在静态方法main中创建对象

//所以要声明为static,静态的

static class MyTimerTask extends TimerTask

{

@Override

public void run() {

System.out.println("定时程序运行中……");

}

}

public static void main(String[] args)

{

Timer timer=new Timer();

//public void schedule(TimerTask task, long delay, long period)

//在延时delay毫秒后重复的执行task,周期是period毫秒

timer.schedule(new MyTimerTask(), 0, 1000);

}

}

?

??? 我们可以看到控制台输出如下:

?

????

????

121192bc1e9d2222ea79cb6fc338b9a7.png

?

?

?? 要用Java实现节拍器,其实只比上边的代码稍微复杂一点点。其中最核心的代码是一下两段:

?

?

//"开始"按钮的单击事件

jButton1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

//pp记录的当前拍是当前小节的第几拍

pp=1;

//获取拍速,如60代表每分钟60拍

tempo=Float.parseFloat(jTextField1.getText());

//获取拍数,如4代表4拍为一小节

section=Integer.parseInt(jTextField2.getText());

Timer mytimer=new Timer();

//根据用户输入的拍速计算TimerTask的频率

float tempFloat=60/tempo*1000;

System.out.print(String.valueOf(tempFloat));

mytimer.schedule(new MyTimerTask(),0, (long)tempFloat);

}

});

?

class MyTimerTask extends TimerTask{

@Override

public void run() {

//让jLabel这个控件显示当前节拍数

jLabel3.setText(String.valueOf(pp));

if(pp!=section) //如果还没满一小节则将当前节拍数PP加1

pp++;

else //如果满了一小节

pp=1;

}

}

?

完整的.java文件附在附件中。

?

?

?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值