java我用的是eclipse,想在控制台输出的时候直接覆盖前面输出的

ljm19891118 2009-10-21 07:08:43
大家有什么办法刷新控制台么,
做的题目是倒计时,计算今天距离圣诞节还有多少天
并且倒计时的时间时刻在变动
希望大家指点下
...全文
1037 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljm19891118 2009-10-24
  • 打赏
  • 举报
回复
楼上的
谢谢了
我是初学者
你写的代码里面有些包还不认识...
刚才运行了下
都是在一排输出
并且输出依次往后的
但是控制台的屏幕还是在最左边
相当于是把倒计时
一个个的输出....

  • 打赏
  • 举报
回复 1
楼主把这段代码在控制台中编译并运行一下:

import java.util.Calendar;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class TimerTest {

public static void main(String[] args) {
ScheduledExecutorService s = new ScheduledThreadPoolExecutor(1);
s.scheduleAtFixedRate(new InnerTimerTest(), 0, 1, TimeUnit.SECONDS);
}

private static class InnerTimerTest implements Runnable {

private final static String BACKSPACES = getBackspaces(80);

public void run() {
System.out.print(BACKSPACES); // 输出很多个退格符
Xmas xmas = Xmas.getXmas();
System.out.printf("现在是 %tF %<tT 距 %d 年的圣诞节还有 %d 天 %d 时 %d 分 %d 秒",
xmas.getCurrent(),
xmas.getXmasYear(),
xmas.getYearInterval(),
xmas.getHourInterval(),
xmas.getMinuteInterval(),
xmas.getSecondInterval()
);
}

/**
* 生成多个退格符
* @param count
* @return
*/
private static String getBackspaces(int count) {
char[] chs = new char[count];
for(int i = 0; i < count; i++) {
chs[i] = '\b';
}
return new String(chs);
}
}
}

class Xmas {

private final static long SECOND = 1000L;
private final static long MINUTE = 60L * SECOND;
private final static long HOUR = 60L * MINUTE;
private final static long DAY = 24L * HOUR;

private int xmasYear; // 下一个圣诞节的年份
private long interval; // 与下一个圣诞节的毫秒数间隔
private Calendar current; // 当前时间

private Xmas(int xmasYear, long interval, Calendar current) {
this.xmasYear = xmasYear;
this.interval = interval;
this.current = current;
}

public static Xmas getXmas() {
Calendar current = Calendar.getInstance();
Calendar xmas = getNextXmasCalendar(current);
int xmasYear = xmas.get(Calendar.YEAR);
long interval = xmas.getTimeInMillis() - current.getTimeInMillis();
return new Xmas(xmasYear, interval, current);
}

/**
* 获得下一个圣诞节的 Unix 纪元毫秒数
* @param current
* @return
*/
private static Calendar getNextXmasCalendar(Calendar current) {
Calendar xmas = Calendar.getInstance();
xmas.set(Calendar.MONTH, Calendar.DECEMBER);
xmas.set(Calendar.DATE, 25);
xmas.set(Calendar.HOUR_OF_DAY, 0);
xmas.set(Calendar.MINUTE, 0);
xmas.set(Calendar.SECOND, 0);
xmas.set(Calendar.MILLISECOND, 0);
if(current.after(xmas)) {
// 如果当前时间在当前的圣诞节之后,则下一个圣诞节年份加 1
xmas.add(Calendar.YEAR, 1);
}
return xmas;
}

public int getXmasYear() {
return xmasYear;
}
public long getInterval() {
return interval;
}
public Calendar getCurrent() {
return current;
}

public long getYearInterval() {
return interval / DAY;
}

public long getHourInterval() {
return (interval % DAY) / HOUR;
}

public long getMinuteInterval() {
return (interval % HOUR) / MINUTE;
}

public long getSecondInterval() {
return (interval % MINUTE) / SECOND + (interval > 0 ? 1 : 0);
}
}
wzc_zxy 2009-10-22
  • 打赏
  • 举报
回复
为啥要用控制台输出呢》控制台肯定是运行一次刷一次了。你可以生成个桌面啊 在桌面上显示倒计时。
ljm19891118 2009-10-22
  • 打赏
  • 举报
回复
还不会....
初学者
3个星期还不到...
ljm19891118 2009-10-21
  • 打赏
  • 举报
回复

我还以为是和VC一样可以清屏幕的....
霜之哀伤 2009-10-21
  • 打赏
  • 举报
回复
eclipse的控制台不解析退格键(\b),所以做不到。
在命令行里 java xxx,是可以通过打印(\b)来做到覆盖的。
haha7840 2009-10-21
  • 打赏
  • 举报
回复
楼主也是刚学不久吧,我也是 呵呵
  • 打赏
  • 举报
回复
做不到,在操作系统控制台下可以做到
qjcslgnhwayagain 2009-10-21
  • 打赏
  • 举报
回复
在控制台输出好像是不可以改变的吧,除非你隔一段时间重新编译一下程序

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧