求java的计时器代码,应该比较简单的,来看看吧。

java计时器代码,有一个界面,三个按钮:一个开始,一个暂停,一个复位。时间格式如下图(还有就是能不能让时间到了99分钟59秒99就停下来不动了?),感谢了!时间显示出来... java计时器代码,有一个界面,三个按钮:一个开始,一个暂停,一个复位。时间格式如下图(还有就是能不能让时间到了99分钟59秒99就停下来不动了?),感谢了!
时间显示出来不用像图片那样,mm : ss : xx 这样就可以了。
展开
 我来答
百度网友d6952d3ca
推荐于2017-10-08 · TA获得超过115个赞
知道小有建树答主
回答量:72
采纳率:0%
帮助的人:74万
展开全部
package test;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Test5 extends Applet {
    private final Panel pan = new Panel();
    private final Label time = new Label();
    private final Button btnGo = new Button("开始");
    private final Button btnPouse = new Button("暂停");
    private final Button btnReset = new Button("复位");
    private final StopwatchThread swThread = new StopwatchThread();
   
    private class btnGoListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
   
swThread.go();
btnGo.setEnabled(false);
}
    }
    private class btnPouseListener implements ActionListener {
     public void actionPerformed(ActionEvent e) {
        if(btnGo.isEnabled()){
        return ;
        }
      if (btnPouse.getLabel().equals("继续")) {
     swThread.go();
     btnPouse.setLabel("暂停");
         } else if (btnPouse.getLabel().equals("暂停")) {
     swThread.noGo();
     btnPouse.setLabel("继续");
         }
     }
        }
    private class btnResetListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
    swThread.reset();
    btnGo.setEnabled(true);
    btnGo.setLabel("开始");
    btnPouse.setLabel("暂停");
}
    }

    private class StopwatchThread extends Thread {
private boolean going = false;
private long prevElapsed = 0;
private Date startDate = new Date();
private long elapsedTime() {
    return prevElapsed +
(going ? new Date().getTime() - startDate.getTime() : 0);
}
private String msToString(long time) {
   System.out.println(time+"  "+((0*60+2)*1000+999));
if(((99*60+59)*1000+983)<=time&&((99*60+59)*1000+999)>=time){//((0*60+2)*1000+983)<=time&&((0*60+2)*1000+999)>=time
if (time % 1000 < 990)
time += 2;
     swThread.noGo();
    }

String ms, sec, min;
    if (time % 10 >= 5)
time += 5;
    ms = Long.toString(time % 1000);
    while (ms.length() < 3)
ms = "0" + ms;
    ms = ms.substring(0, ms.length() - 1);
    time /= 1000;
    sec = Long.toString(time % 60);
    if (sec.length() == 1) sec = "0" + sec;
    time /= 60;
    min = Long.toString(time);
    
    return min + ":" + sec + "." + ms;
}

public void go() {
    startDate = new Date();
    going = true;
}
public void noGo() {
    prevElapsed = elapsedTime();
    going = false;
}
public void reset() {
    going = false;
    prevElapsed = 0;
}
public void run() {
    while (true) {
time.setText(msToString(elapsedTime()));
yield();
    }
}
    }

    public void init() {
setLayout(new GridLayout(2,2));
setBackground(Color.lightGray);
setForeground(Color.black);
pan.setLayout(new GridLayout(3,2));
pan.add(new Label("计时:"));
time.setForeground(Color.blue);
pan.add(time);
pan.add(btnGo);
pan.add(btnPouse);
pan.add(btnReset);
pan.add(new Label());
add(pan);
btnGo.addActionListener(new btnGoListener());
btnReset.addActionListener(new btnResetListener());
btnPouse.addActionListener(new btnPouseListener());
swThread.setDaemon(true);
swThread.start();
    }

    public static void main(String[] args) {
    Test5 applet = new Test5();
Frame aFrame = new Frame("计时器");
aFrame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
System.exit(0);
    }
});
aFrame.add(applet, BorderLayout.CENTER);
aFrame.setSize(400, 200);
applet.init();
applet.start();
aFrame.setVisible(true);
    }
}

可以改变有注释的那个if语句里面的值来判断什么时候停止

追问
请问这个

if(((99*60+59)*1000+983)=time)
的983是怎么来的?还有就是可不可以只判断time大于某个数,去掉&&及后面的?
追答
我是32位的xp系统,while循环一次耗时16ms,你要到999停止,但只显示两位,所以比如可能到985就一下子跳到下一秒了,没法停止。所以至少要判断一个周期的范围内。
匿名用户
2015-06-10
展开全部
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Test extends Applet {
private final Panel pnlTop = new Panel();
private final Panel pnlBot = new Panel();
private final Label lblDate = new Label();
private final Label lblTime = new Label();
private final Label lblWatch = new Label();
private final Button btnGo = new Button("开始");
private final Button btnReset = new Button("重置");
private final Label lblSplit = new Label();
private final Button btnSplit = new Button("定点");
private final Button btnSplitReset = new Button("定点重置");
private final Button btnLapAdd = new Button("冲线");
private final Button btnLapReset = new Button("冲线重置");
private final java.awt.List lstLaps = new java.awt.List();
private final UpdateClockThread ucThread = new UpdateClockThread();
private final StopwatchThread swThread = new StopwatchThread();

private class btnGoListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if ((btnGo.getLabel().equals("开始")) ||
(btnGo.getLabel().equals("继续"))) {
// Start the clock!
swThread.go();
btnGo.setLabel("停止");
btnGo.setBackground(Color.red);
} else if (btnGo.getLabel().equals("停止")) {
// Stop the clock!
swThread.noGo();
btnGo.setLabel("继续");
btnGo.setBackground(Color.green);
}
}
}

private class btnResetListener implements ActionListener {
/** Actually run when the button gets clicked.
*@param e The event
*/
public void actionPerformed(ActionEvent e) {
swThread.reset();
btnGo.setLabel("开始");
btnGo.setBackground(Color.green);
}
}

/** Listens to the Split button.
* @version CS2136 - Term D'00 - Assignment 5
* @author Peter Cooper Jr.
*/
private class btnSplitListener implements ActionListener {
/** Actually run when the button gets clicked.
*@param e The event
*/
public void actionPerformed(ActionEvent e) {
lblSplit.setText(lblWatch.getText());
}
}

/** Listens to the Split Reset button.
* @version CS2136 - Term D'00 - Assignment 5
* @author Peter Cooper Jr.
*/
private class btnSplitResetListener implements ActionListener {
/** Actually run when the button gets clicked.
*@param e The event
*/
public void actionPerformed(ActionEvent e) {
lblSplit.setText("");
}
}

/** Listens to the Lap Add button.
* @version CS2136 - Term D'00 - Assignment 5
* @author Peter Cooper Jr.
*/
private class btnLapAddListener implements ActionListener {
/** Actually run when the button gets clicked.
*@param e The event
*/
public void actionPerformed(ActionEvent e) {
swThread.addLap();
}
}

/** Listens to the Lap Reset button.
* @version CS2136 - Term D'00 - Assignment 5
* @author Peter Cooper Jr.
*/
private class btnLapResetListener implements ActionListener {
/** Actually run when the button gets clicked.
*@param e The event
*/
public void actionPerformed(ActionEvent e) {
swThread.resetLap();
}
}

/** A thread that updates the current date & time.
* @version CS2136 - Term D'00 - Assignment 5
* @author Peter Cooper Jr.
*/
private class UpdateClockThread extends Thread {
/** The actual work of the thread.
*/
public void run() {
while (true) {
Calendar now = Calendar.getInstance();
String month = Integer.toString(now.get(Calendar.MONTH)+1);
String date = Integer.toString(now.get(Calendar.DAY_OF_MONTH));
String year = Integer.toString(now.get(Calendar.YEAR));
String hour = Integer.toString(now.get(Calendar.HOUR));
if (hour.equals("0")) hour = "12";
String minute = Integer.toString(now.get(Calendar.MINUTE));
if (minute.length() == 1) minute = "0" + minute;
String second = Integer.toString(now.get(Calendar.SECOND));
if (second.length() == 1) second = "0" + second;
String ampm = now.get(Calendar.AM_PM) == Calendar.AM
? "AM" : "PM";

lblDate.setText(month + "/" + date + "/" + year);
lblTime.setText(hour + ":" + minute + ":" + second
+ " " + ampm);
try {
sleep(500);
} catch (InterruptedException e) {}
}
}
}

private class StopwatchThread extends Thread {
/** Whether or not stopwatch is running. */
private boolean going = false;
/** Stores elapsed milliseconds of previous runs. */
private long prevElapsed = 0;
/** Stores beginning time of this run. */
private Date startDate = new Date();
/** Current lap number. */
private int lapNum = 0;
/** Elapsed time at end of last lap. */
private long lastLapTime = 0;

/** Returns elapsed time in milliseconds.
*@return The elapsed time
*/
private long elapsedTime() {
return prevElapsed +
(going ? new Date().getTime() - startDate.getTime() : 0);
}
/** Changes the number of elapsed milliseconds into a string.
*@param time Number of elapsed milliseconds
*@return The elapsed time as a string.
*/
private String msToString(long time) {
String ms, sec, min;
if (time % 10 >= 5) //round to nearest hundredth
time += 5;
ms = Long.toString(time % 1000);
while (ms.length() < 3)
ms = "0" + ms;
ms = ms.substring(0, ms.length() - 1);
time /= 1000;
sec = Long.toString(time % 60);
if (sec.length() == 1) sec = "0" + sec;
time /= 60;
min = Long.toString(time);
return min + ":" + sec + "." + ms;
}

public void go() {
startDate = new Date();
going = true;
}
public void noGo() {
prevElapsed = elapsedTime();
going = false;
}
public void reset() {
going = false;
prevElapsed = 0;
lastLapTime = 0;
}
public void addLap() {
long elapsed = elapsedTime();
lstLaps.add("冲线 " + Integer.toString(++lapNum)+ " -- " +
"用时: " + msToString(elapsed) + " -- " +
"冲线时间: " + msToString(elapsed - lastLapTime));
lastLapTime = elapsed;
}
/** Resets the lap list.
*/
public void resetLap() {
lstLaps.removeAll();
lapNum = 0;
lastLapTime = 0;
}
/** Main code of the thread.
*/
public void run() {
while (true) {
lblWatch.setText(msToString(elapsedTime()));
yield();
}
}
}

public void init() {
setLayout(new GridLayout(2,1));
setBackground(Color.lightGray);
setForeground(Color.black);
pnlTop.setLayout(new GridLayout(4,4));
pnlTop.add(new Label("日期:"));
pnlTop.add(lblDate);
pnlTop.add(new Label("时间:"));
pnlTop.add(lblTime);
pnlTop.add(new Label("计时:"));
//lblWatch.setBackground(Color.black);
lblWatch.setForeground(Color.blue);
pnlTop.add(lblWatch);
pnlTop.add(btnGo);
btnGo.setBackground(Color.green);
pnlTop.add(btnReset);
pnlTop.add(new Label("定点:"));
pnlTop.add(lblSplit);
pnlTop.add(btnSplit);
pnlTop.add(btnSplitReset);
pnlTop.add(new Label("冲线时间:"));
pnlTop.add(new Label());
pnlTop.add(btnLapAdd);
pnlTop.add(btnLapReset);
pnlBot.setLayout(new GridLayout(1,1));
pnlBot.add(lstLaps);
add(pnlTop);
add(pnlBot);
btnGo.addActionListener(new btnGoListener());
btnReset.addActionListener(new btnResetListener());
btnSplit.addActionListener(new btnSplitListener());
btnSplitReset.addActionListener(new btnSplitResetListener());
btnLapAdd.addActionListener(new btnLapAddListener());
btnLapReset.addActionListener(new btnLapResetListener());
swThread.setDaemon(true);
ucThread.setDaemon(true);
swThread.start();
ucThread.start();
}

public static void main(String[] args) {
Test applet = new Test();
Frame aFrame = new Frame("计时器");
aFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
aFrame.add(applet, BorderLayout.CENTER);
aFrame.setSize(400, 200);
applet.init();
applet.start();
aFrame.setVisible(true);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jhjhy123
2015-06-10 · 超过67用户采纳过TA的回答
知道小有建树答主
回答量:212
采纳率:0%
帮助的人:63.3万
展开全部

import java.util.Timer;
import java.util.TimerTask;

public class server {
private static Timer timer;
private static int mm = 0;
private static int ss = 0;
private static int ms = 0;

public static void main(String[] args) {
timer = new Timer();
timer.schedule(new myTask(), 1000, 10);
}

static class myTask extends TimerTask {

/**
 * 重载方法
 */
@Override
public void run() {

ms += 1;
if (ms == 100) {
ms = 0;
ss += 1;
}
if (ss == 59) {
ss = 0;
mm += 1;
}
if (mm == 99 && ss == 59 && ms == 100) {
timer.cancel();
}
System.out.println(mm + " " + ss + " " + ms);
}
}
}

大概就是这个样子了,效果没有做

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式