【问题标题】:Java short delayJava 短延迟
【发布时间】:2015-10-05 13:31:51
【问题描述】:

我一直在尝试创建一种方法来重新创建 pokemon 的“滚动文本”,其中一次出现一个字母。问题在于能够创建一个足够短的计时器以使其合理。

这是我尝试过的:

public static void roll(String text) {
    int i = 0;
    while(i < text.length()) {
        try {
            Thread.sleep(200);                 //1000 milliseconds is one second.
        } catch(InterruptedException ex) {
            Thread.currentThread().interrupt();
        }
    System.out.print(text.charAt(i));
    i++;
    }
}

如果我将 Thread.sleep 中的值设置为 250 以上,这将正常工作。问题是,如果我将秒数设置为低于 250,那么它将等待整个时间长度(如果我告诉它等待 100 毫秒 100次,它会等待 10 秒),然后再输出任何内容。

我不确定这是定时器类型本身的问题,还是这里有其他问题。

【问题讨论】:

  • @jonathon 需要 1 秒还是 10 秒,因为 100 毫秒 10 次是 1000 毫秒还是 1 秒
  • 对不起,我的意思是 100ms 100 次 10 秒。
  • @JonathonM 很奇怪,对我来说效果很好......
  • 你应该养成正确处理中断的习惯。当一个线程被中断时,这意味着其他一些代码正在要求你停止你正在做的事情。忽略它并继续本质上会使您的代码成为流氓线程。您可以做的最好的事情是完全删除 try/catch,并将 throws InterruptedException 添加到您的方法的签名中。如果你不想这样做,至少把 try/catch 放在你的循环而不是里面,所以当中断线程请求这样做时,循环就会终止。

标签: java text timer output


【解决方案1】:

您可以使用System.out.flush(); 来强制写出缓冲区。

【讨论】:

  • 我需要把这个放在哪里?把它放在 System.out.print(text.charAt(i)); 之后没有解决任何问题。我还应该使用任何参数吗?
  • @JonathonM 您如何运行该应用程序?在诸如 Netbeans 之类的 IDE 中,还是在命令行中?
  • @JonathonM 这可能会影响它,即使没有冲洗,我的 Eclipse 似乎也能很好地打印它。如果 Netbeans 确实可以防止冲洗,那并不是很好。您可以从命令行运行它,看看它是否效果更好。
  • 谢谢,我现在要切换到eclipse了!我的老师使用了 Netbeans,所以我坚持使用它。到现在为止从来没有遇到过问题。
猜你喜欢
  • 2016-08-18
  • 2014-01-04
  • 2017-11-01
  • 2020-10-21
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
相关资源
最近更新 更多