2012-08-02 60 views
3

我是Java新手,想要了解更多信息,我试着制作一个时钟。它可以完美地工作,除了每次更改后都会在新行上打印。我如何制作它以便我可以用新时间替换已经打印出来的文字?我如何替换已经在Java屏幕上打印出来的文本?

public class test { 
public static void main(String[] args) { 
    test.clock(); 
} 
public static void clock(){ 
    int sec = 0; 
    int min = 0; 
    int h = 0; 
    for(;;){ 
     sec++; 
     if(sec == 60) 
      min++; 
      sec = 0; 
     if(min == 60) 
      h++; 
      min = 0; 
     if(h == 24){ 
      h = 0; 
     } 
     {try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     }} 
     if(h < 10){ 
      System.out.print("0"+h+":"); 
     } else{ 
      System.out.print(h+":"); 
      } 
     if(min < 10){ 
      System.out.print("0"+min+":"); 
     } else{ 
       System.out.print(min+":"); 
      } 
     if(sec < 10){ 
      System.out.println("0"+sec); 
     } else{ 
       System.out.println(sec); 
      } 
    }  
} 
} 

这是我的代码。这里是我想要做的一个例子: 我想把这个:00:00:00 到这里:00:00:01(代码这样做,但它打印在一个新的行,并没有删除旧时间) 事情是我想摆脱第一个(00:00:00),并在同一行打印第二个(00:00:01)。

这在Java中可能吗?

+0

相关:http://stackoverflow.com/questions/606086/how-do-you-clear-the-java-console – Gnoupi 2012-08-02 12:52:02

+0

另请参见[什么是良好的Java,类似curses的终端应用程序库?]( http://stackoverflow.com/questions/439799) – McDowell 2012-08-02 12:56:48

+0

@McDowell - 哦,很好,谢谢。 – Gnoupi 2012-08-02 18:13:17

回答

12

这与java实际上没有任何关系。相反,您希望您显示的控制台覆盖文本。

这可以通过发送回车符(在Java中为\ r)而不是换行符(Java中的\ n)来完成(使用任何语言)。所以你从来没有使用println(),只有打印()如果你想这样做。如果您在第一次打印之前添加一个打印(“\ r”),它应该做你想做的事。

BTW这将是更加优雅和简单,如果你建的整个时间在一个字符串,然后输出,一次就全部:)

+0

谢谢,我会尽力的! – 2012-08-02 12:58:48

+0

顺便说一句,日蚀可以这样做吗?当我测试它时,它不工作。 – 2012-08-02 13:08:19

+0

没有eclipse控制台不支持。如果你从命令行运行你的类(使用java命令),它应该按预期工作(Windows控制台支持它,并且任何Unix控制台也应该)。 – Durandal 2012-08-02 13:11:06

0

只是为了让这个简单一点,就可以消除尝试捕捉的东西通过使用“抛出InterruptedException”是这样的:

public static void main(String[] args) throws InterruptedException { 
System.out.println("wait for it...."); 
Thread.sleep(5000); 
System.out.println("ok :)"); 

} 

没有更多的尝试抓东西。我学习了这个为我所在的机器人团队编写的自治代码。很有用!