倒计时java等价物
我正在制作一个使用Twitter API的应用程序。我可以在180次API调用后达到API限制,当我达到该限制时,我想做的是启动一个计时器,该计时器将每1秒更新一次倒计时(jLabel),最重要的是计时器将在一定的X秒后完成(取自API调用) Android CountDownTimer类是否有桌面Java替代方案 我知道我能做到,但这似乎不合适:倒计时java等价物,java,swing,timer,countdown,Java,Swing,Timer,Countdown,我正在制作一个使用Twitter API的应用程序。我可以在180次API调用后达到API限制,当我达到该限制时,我想做的是启动一个计时器,该计时器将每1秒更新一次倒计时(jLabel),最重要的是计时器将在一定的X秒后完成(取自API调用) Android CountDownTimer类是否有桌面Java替代方案 我知道我能做到,但这似乎不合适: time.scheduleAtFixedRate(new TimerTask() { long startTime = System.cur
time.scheduleAtFixedRate(new TimerTask() {
long startTime = System.currentTimeMillis();
@Override
public void run() {
if (System.currentTimeMillis() - startTime > X_SECONDS_HERE * 1000) {
cancel();
} else {
// Update GUI countdown here
}
}
另一种选择是将SwingWorker与Thread.sleep()一起使用。这些是唯一的选择吗?Java文档有一个类似的使用计时器,因此您的代码看起来几乎正确:
final Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
int i = Integer.parseInt(args[0]);
public void run() {
System.out.println(i--);
if (i< 0)
timer.cancel();
}
}, 0, 1000);
final Timer=新定时器();
timer.scheduleAtFixedRate(新TimerTask(){
inti=Integer.parseInt(args[0]);
公开募捐{
系统输出println(i--);
if(i<0)
timer.cancel();
}
}, 0, 1000);
Java文档有一个类似的使用计时器,因此您的代码看起来几乎正确:
final Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
int i = Integer.parseInt(args[0]);
public void run() {
System.out.println(i--);
if (i< 0)
timer.cancel();
}
}, 0, 1000);
final Timer=新定时器();
timer.scheduleAtFixedRate(新TimerTask(){
inti=Integer.parseInt(args[0]);
公开募捐{
系统输出println(i--);
if(i<0)
timer.cancel();
}
}, 0, 1000);
这已经是正确的,但您需要额外的参数,例如:
time.scheduleAtFixedRate(new TimerTask() {
long startTime = System.currentTimeMillis();
@Override
public void run() {
if (System.currentTimeMillis() - startTime > X_SECONDS_HERE * 1000) {
cancel();
} else {
// Update GUI countdown here
}
}}, 1000,2000);
1000表示执行前的延迟
1000毫秒
s,2000任务将每隔2000毫秒重复一次
这已经是正确的,但您需要额外的参数,例如:
time.scheduleAtFixedRate(new TimerTask() {
long startTime = System.currentTimeMillis();
@Override
public void run() {
if (System.currentTimeMillis() - startTime > X_SECONDS_HERE * 1000) {
cancel();
} else {
// Update GUI countdown here
}
}}, 1000,2000);
1000表示执行前延迟
1000毫秒
s,而2000任务将每隔2000毫秒重复一次
这是我不久前为自己做的一个返回方法。它需要Java5
我相信是的。糟糕的是,若将长时间以毫秒为单位,它将返回一个格式完美、易于阅读的字符串,请尝试:
public static String getTime(long time) {
long timeToEdit = time;
String textToDraw = "";
if (TimeUnit.MILLISECONDS.toMinutes(time) >= 10) {
textToDraw = textToDraw + TimeUnit.MILLISECONDS.toMinutes(time);
} else {
textToDraw = textToDraw + "0" + TimeUnit.MILLISECONDS.toMinutes(time);
}
timeToEdit -= TimeUnit.MINUTES.toMillis(TimeUnit.MILLISECONDS.toMinutes(timeToEdit));
if (TimeUnit.MILLISECONDS.toSeconds(timeToEdit) >= 10) {
textToDraw = textToDraw + ":" + TimeUnit.MILLISECONDS.toSeconds(timeToEdit);
} else {
textToDraw = textToDraw + ":0" + TimeUnit.MILLISECONDS.toSeconds(timeToEdit);
}
timeToEdit -= TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(timeToEdit));
if (TimeUnit.MILLISECONDS.toMillis(timeToEdit) >= 100) {
textToDraw = textToDraw + ":" + TimeUnit.MILLISECONDS.toMillis(timeToEdit);
} else if (TimeUnit.MILLISECONDS.toMillis(timeToEdit) >= 10) {
textToDraw = textToDraw + ":0" + TimeUnit.MILLISECONDS.toMillis(timeToEdit);
} else {
textToDraw = textToDraw + ":00" + TimeUnit.MILLISECONDS.toMillis(timeToEdit);
}
return textToDraw;
}
很抱歉代码格式很难看,我在手机上,很难让t看起来好看,希望有人会编辑它。这是我不久前为自己制作的一个返回方法。它需要Java5 我相信是的。糟糕的是,若将长时间以毫秒为单位,它将返回一个格式完美、易于阅读的字符串,请尝试:
public static String getTime(long time) {
long timeToEdit = time;
String textToDraw = "";
if (TimeUnit.MILLISECONDS.toMinutes(time) >= 10) {
textToDraw = textToDraw + TimeUnit.MILLISECONDS.toMinutes(time);
} else {
textToDraw = textToDraw + "0" + TimeUnit.MILLISECONDS.toMinutes(time);
}
timeToEdit -= TimeUnit.MINUTES.toMillis(TimeUnit.MILLISECONDS.toMinutes(timeToEdit));
if (TimeUnit.MILLISECONDS.toSeconds(timeToEdit) >= 10) {
textToDraw = textToDraw + ":" + TimeUnit.MILLISECONDS.toSeconds(timeToEdit);
} else {
textToDraw = textToDraw + ":0" + TimeUnit.MILLISECONDS.toSeconds(timeToEdit);
}
timeToEdit -= TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(timeToEdit));
if (TimeUnit.MILLISECONDS.toMillis(timeToEdit) >= 100) {
textToDraw = textToDraw + ":" + TimeUnit.MILLISECONDS.toMillis(timeToEdit);
} else if (TimeUnit.MILLISECONDS.toMillis(timeToEdit) >= 10) {
textToDraw = textToDraw + ":0" + TimeUnit.MILLISECONDS.toMillis(timeToEdit);
} else {
textToDraw = textToDraw + ":00" + TimeUnit.MILLISECONDS.toMillis(timeToEdit);
}
return textToDraw;
}
很抱歉,我是在移动设备上,很难让t看起来好看,希望有人会编辑它。(正如@AndrewThompson指出的:)对于Swing,您通常希望使用一个而不是java.util.Timer或TimerTask。原因是Swing是一个单线程框架,在这个框架中,对UI(在您的例子中是标签)的所有更新都应该在上进行。使用Swing定时器,可通过作用于EDT的ActionListener
进行重复调用
定时器的基本结构是:
Timer(int delay, ActionListener listener)
其中,delay
是初始和事件之间延迟的毫秒,侦听器在actionPerformed
方法中保留回调功能。所以你有点像
Timer timer = new Timer(1000, new ActionListener(){
private int count = 100;
@Override
public void actionPerformed(ActionEvent e) {
if (count == 0) {
((Timer)e.getSource).stop();
} else {
// decrement the count and set the text for the label
}
}
});
// start the timer with a call to timer.start()
使用上述代码,对actionPerformed
的调用将每100毫秒发生一次。因此,无论您希望发生什么重复操作,都要将代码放在那里
资源:
(正如@AndrewThompson指出的:)对于Swing,您通常希望使用,而不是java.util.Timer或TimerTask。原因是Swing是一个单线程框架,在这个框架中,对UI(在您的例子中是标签)的所有更新都应该在上进行。使用Swing定时器,可通过作用于EDT的ActionListener
进行重复调用
定时器的基本结构是:
Timer(int delay, ActionListener listener)
其中,delay
是初始和事件之间延迟的毫秒,侦听器在actionPerformed
方法中保留回调功能。所以你有点像
Timer timer = new Timer(1000, new ActionListener(){
private int count = 100;
@Override
public void actionPerformed(ActionEvent e) {
if (count == 0) {
((Timer)e.getSource).stop();
} else {
// decrement the count and set the text for the label
}
}
});
// start the timer with a call to timer.start()
使用上述代码,对actionPerformed
的调用将每100毫秒发生一次。因此,无论您希望发生什么重复操作,都要将代码放在那里
资源:
如果更新JLabel
,请使用Swing计时器
,而不是TimerTask
或java.util.Timer
。如果更新JLabel
,使用SwingTimer
而不是TimerTask
或java.util.Timer
。我想这是最后的唯一方法。当然,除非我尝试创建一个计时器子类,我可以稍后尝试。我想这是最后的唯一方法。当然,除非我尝试创建一个计时器子类,我可以稍后尝试。噢,对了我以为你想抽时间,对不起,我以为你想抽时间,对不起