java编程时 如何进行计时?在时间内完成则显示时间,没有完成则跳出程序
用MyEclipse编辑一个打字游戏的程序,要求要计时25分钟,在25分钟内如果完成了游戏,则显示出用了多少时间,如果超过25分钟还没有完成,则直接跳出程序,显示“已超时...
用MyEclipse编辑一个打字游戏的程序,要求要计时25分钟,在25分钟内如果完成了游戏,则显示出用了多少时间,如果超过25分钟还没有完成,则直接跳出程序,显示“已超时,游戏结束“
关于时间这块我没学过,具体应该怎么弄?求大神!!! 展开
关于时间这块我没学过,具体应该怎么弄?求大神!!! 展开
6个回答
展开全部
给你代码。
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Test extends JFrame implements ActionListener {
private JTextField text = null;
private JTextArea area = null;
private SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
private Calendar time = Calendar.getInstance();
private JButton start = null;
private JButton complete = null;
private Timer timer = null;
public Test() {
time.set(Calendar.MINUTE, 25);
time.set(Calendar.SECOND, 0);
JPanel top = new JPanel();
top.setLayout(new BorderLayout());
JLabel label = new JLabel("time:");
text = new JTextField("25:00");
text.setEditable(false);
top.add(label, BorderLayout.WEST);
top.add(text, BorderLayout.CENTER);
add(top, BorderLayout.NORTH);
area = new JTextArea();
area.setEnabled(false);
JScrollPane scrollpane = new JScrollPane(area);
add(scrollpane, BorderLayout.CENTER);
JPanel buttons = new JPanel();
buttons.setLayout(new FlowLayout(FlowLayout.RIGHT));
start = new JButton("start");
start.addActionListener(this);
buttons.add(start);
complete = new JButton("Complete");
complete.addActionListener(this);
buttons.add(complete);
add(buttons, BorderLayout.SOUTH);
setSize(400, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new Test();
}
@Override
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
if ("start".equals(e.getActionCommand())) {
area.setEnabled(true);
timer = new Timer();
timer.schedule(new TimeTask(), new Date(), 1000);
start.setEnabled(false);
} else {
start.setEnabled(true);
area.setEnabled(false);
timer.cancel();
}
}
class TimeTask extends TimerTask {
@Override
public void run() {
time.add(Calendar.SECOND, -1);
String strTime = sdf.format(time.getTime());
text.setText(strTime);
if ("00:00".equals(strTime)) {
start.setEnabled(true);
area.setEnabled(false);
this.cancel();
}
}
}
}
展开全部
public class Test implements Runnable {
//定义一个线程
Thread thread;
//用于停止线程的标志
private boolean flag=true;
public Test(){
thread=new Thread(this);
}
//因为该类实现了Runnable,就必须有run方法,当线程启动时,会调用这个run方法
public void run(){
//获得当前的时间,毫秒为单位
long beginTime=System.currentTimeMillis();
//定义已过去的时间
long time=0;
while(flag){
//这里写实现计时的代码
//在这里,获得已过去的时间
time=System.currentTimeMillis()-beginTime;
System.out.println("已过"+time+"毫秒");
//暂停线程1秒钟,不暂停的话可以把下面代码去掉
try{
Thread.sleep(1000);
}catch(InterruptedException e1){
e1.printStackTrace();
}
}
}
//这里是启动线程的方法,也就是启动线程
public void start(){
thread.start();
}
//这里是暂停的方法,暂停线程
public void Pause(){
try{
thread.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
//这里是继续的方法,唤醒线程
public void Resume(){
thread.notifyAll();
}
//停止线程
public void stop(){
//把flag设成false,则在run中的while循环就会停止循环
flag=false;
}
public static void main(String []args){
//用于测试
Test t=new Test();
//开始线程
t.start();
try{
//10000毫秒以后结束线程
Thread.sleep(10000);
}catch(InterruptedException e1){
e1.printStackTrace();
}
//结束线程
t.stop();
}
}
应该能看懂吧
//定义一个线程
Thread thread;
//用于停止线程的标志
private boolean flag=true;
public Test(){
thread=new Thread(this);
}
//因为该类实现了Runnable,就必须有run方法,当线程启动时,会调用这个run方法
public void run(){
//获得当前的时间,毫秒为单位
long beginTime=System.currentTimeMillis();
//定义已过去的时间
long time=0;
while(flag){
//这里写实现计时的代码
//在这里,获得已过去的时间
time=System.currentTimeMillis()-beginTime;
System.out.println("已过"+time+"毫秒");
//暂停线程1秒钟,不暂停的话可以把下面代码去掉
try{
Thread.sleep(1000);
}catch(InterruptedException e1){
e1.printStackTrace();
}
}
}
//这里是启动线程的方法,也就是启动线程
public void start(){
thread.start();
}
//这里是暂停的方法,暂停线程
public void Pause(){
try{
thread.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
//这里是继续的方法,唤醒线程
public void Resume(){
thread.notifyAll();
}
//停止线程
public void stop(){
//把flag设成false,则在run中的while循环就会停止循环
flag=false;
}
public static void main(String []args){
//用于测试
Test t=new Test();
//开始线程
t.start();
try{
//10000毫秒以后结束线程
Thread.sleep(10000);
}catch(InterruptedException e1){
e1.printStackTrace();
}
//结束线程
t.stop();
}
}
应该能看懂吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
import com.google.gwt.user.client.Timer;
// 申明一个timer变量
private Timer timer = new Timer(){
public void run(){
// 判断是否完成如果完成,弹框框提示等操作
}
};
timer.scheduleRepeating(25 * 1000); // 设置时间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
貌似java有提供一个计时器吧,我记得是Timer类,具体怎么使用你查一下吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用线程控制吧。。。。
追问
怎么控制啊。。。。
追答
看楼上那个人的。。。别人都写了。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询