java启用一个倒计时任务

启用一个连接,把连接存放到一个map中,这个时候没有关闭连接,做一个5秒后关闭连接的机制。(如果调用者在倒计时范围内调用了连接,则重新计数倒计时)目的是判断是否有在调用这... 启用一个连接,把连接存放到一个map中,这个时候没有关闭连接,做一个5秒后关闭连接的机制。(如果调用者在倒计时范围内调用了连接,则重新计数倒计时)目的是判断是否有在调用这个连接,如果没有就关闭。

用java如何创建一个定时器,5秒后打印一句话;(括弧不是每隔5秒,是5秒后执行一次,就执行一次)这时又来一个方法调用这个定时器,如果判断定时器再倒计时范围内中断倒计时重新倒计时,如果定时器没有执行,启用一个5秒后执行的定时器任务
展开
 我来答
百度网友845f74e61
2012-04-22 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1621万
展开全部
你看一下这个吧.用线程来检查超时时间.

----------------------------------------------------------------------
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.SwingConstants;

public class DemoApp extends JFrame implements ActionListener, Runnable {
private JTextField textField;
private int seconds = 0;
// 默认超时时间是10秒
private int time = 10;
private JLabel showTime;
private JButton btnStart;

public DemoApp() {

getContentPane().setLayout(null);

JLabel label = new JLabel("设置时间");
label.setBounds(10, 10, 64, 15);
getContentPane().add(label);

textField = new JTextField();
textField.setBounds(84, 7, 35, 21);
getContentPane().add(textField);
textField.setColumns(10);

JLabel label_1 = new JLabel("秒");
label_1.setBounds(129, 10, 25, 15);
getContentPane().add(label_1);

btnStart = new JButton("开始");
btnStart.setBounds(164, 6, 64, 23);
btnStart.addActionListener(this);
btnStart.setActionCommand("S");
getContentPane().add(btnStart);

JLabel label_2 = new JLabel("计时");
label_2.setBounds(10, 38, 54, 15);
getContentPane().add(label_2);

showTime = new JLabel("0");
showTime.setHorizontalAlignment(SwingConstants.RIGHT);
showTime.setBounds(84, 38, 35, 15);
getContentPane().add(showTime);

JButton button = new JButton("模拟使用连接");
button.setBounds(168, 39, 116, 23);
button.addActionListener(this);
button.setActionCommand("M");
getContentPane().add(button);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setSize(300, 150);
setLocationRelativeTo(null);
setVisible(true);
}

public static void main(String[] args) {
new DemoApp();
}

public void actionPerformed(ActionEvent e) {
if ("S".equals(e.getActionCommand())) {

try {
time = Integer.parseInt(textField.getText());
} catch (Exception ex) {

}
new Thread(this).start();
// 按钮不可用。
btnStart.setEnabled(false);
textField.setEditable(false);
}
if ("M".equals(e.getActionCommand())) {
seconds = 0;
}
}

public void run() {
while (true) {
try {
showTime.setText("" + seconds);
// 检查是否超时
if (seconds == time) {
// 超时后可重新设置时间
btnStart.setEnabled(true);
textField.setEditable(true);
break;
}
seconds++;
// 休眠时间设为一秒,如果总的超时时间很长的话,可以多设置一些
// 比如30秒超时,可以设置为5秒一检查
Thread.sleep(1000);
} catch (Exception e) {

}
}
}
}
bd9006
2012-04-22 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
用延时 Thread.sleep、或Timer+TimeTask 简单用法如下,详细的看API

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

/**
* Simple demo that uses java.util.Timer to schedule a task to execute once 5 seconds have passed.
*/

public class Reminder {
Timer timer;

public Reminder(int seconds) {
timer = new Timer();
timer.schedule(new RemindTask(), seconds*1000);
}

class RemindTask extends TimerTask {
public void run() {
System.out.println("Time's up!");
timer.cancel(); //Terminate the timer thread
}
}

public static void main(String args[]) {
new Reminder(5);
System.out.println("Task scheduled.");
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式