【问题标题】:Wait for a character from input for 10 seconds or proceed earlier if a key was pressed?等待输入的字符 10 秒,或者如果按下某个键则更早继续?
【发布时间】:2018-04-01 13:56:33
【问题描述】:

我有一个 Java 客户端-服务器应用程序,客户端通过控制台从播放器获取输入。它应该给玩家 10 秒的时间来按下一个键,如果玩家更早这样做,则可以更早地继续。如果没有输入,它也会完成这一轮。 我在谷歌上搜索了这个问题,出现了完全不同的事情,其中​​大多数似乎使这项小任务过于复杂。我也无法选择最适合这个的,因为我以前没有做过类似的事情。 那么,我应该:

  • 使用两个单独的线程,
  • 使用 wait() 或 notify(),
  • 使用 sleep(),
  • 检查时间戳还是其他?

我更喜欢使用具有两个退出条件的 while 循环。 目前我正在使用这样的扫描仪读取字符输入:

 scanner.next().charAt(0);

【问题讨论】:

    标签: java input console delay


    【解决方案1】:

    现在我是这样做的,但仍然欢迎建议:) 我想知道是否可以不让用户按“输入”而只读取一个符号。使用 read() 而不是 readline() 它仍然等待按下回车键。

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Time left to bet:  ");
        for (i = 10; i > 0 && !gotInput; i--) {
            System.out.print(i+"...");
            Thread.sleep(1000);
            gotInput = reader.ready();
        }
        if (!gotInput) {
            System.out.print(0);
        }
        System.out.println();
    

    【讨论】:

    • Thread.sleep 不会在线程处于睡眠状态时阻止所有输入,因为您在读取字符的同一线程上调用它?为什么不使用java.util.Timer 或后台线程来解决这个问题而不阻塞接收输入的线程呢?当然,您的搜索已经向您展示了如何使用这些,因为这是一个非常常见的问题。
    • 每隔一秒检查一次是否有输入。我想它确实会阻塞,但如果动作在几毫秒后完成并不重要。不过我会研究如何使用计时器,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2012-07-31
    相关资源
    最近更新 更多