【问题标题】:Pause loop on user input用户输入暂停循环
【发布时间】:2014-10-01 15:16:33
【问题描述】:

如果我有这样的循环:

for(int i = 0; i <= 10; i++) { 
    System.out.println("Hello, User " + i;
    Thread.sleep(1000)
}

我将如何添加不需要用户输入的代码,但如果用户选择在给定点暂停循环,他们可以这样做,并在片刻后恢复?

【问题讨论】:

  • 什么?你说你不想要用户输入,然后描述用户输入。你到底想做什么?
  • 我支持@tnw - 你的意图不明确。您想为您的i=6 步骤硬编码一个更长的休息时间吗?
  • 它还没有在代码中,因为我不知道它是否可能。我不希望它在每次迭代时询问用户是否想输入一些东西,我希望用户能够在每次迭代中的任何时候输入一些东西来硬暂停它

标签: java multithreading loops


【解决方案1】:

为此,您需要实现多线程。一个线程将运行循环(T1),而另一个线程可以等待用户输入(T2)。

T1 - while --> 检查是否通过公共 bool 属性输入 --> 继续/中断循环

T2 - 等待输入 --> if input=="pause" --> 将 common 属性设置为 true 暂停循环

类似:

class MultiThread implements Runnable {

    boolean gotInput = false;
    int i = 0;
    public void run() {
        for(;i <= 10 && !gotInput; i++) {
            System.out.println("Hello, User " + i;
            Thread.sleep(1000)
        }
    }

    public static void main(String args[]) {

        MultiThread mt = new MultiThread ();
        Thread t = new Thread(mt);
        t.start();

        Scanner s = new Scanner(System.in);
        while (!s.next().equals("pause"));

        test.gotInput = true;
    }
}

如果需要,您可以在同一行恢复代码。

【讨论】:

    【解决方案2】:

    尝试创建一个后台线程,等待 1 秒让用户选择暂停。如果 1 秒内没有被选中,则继续前进。

    这样写,你的Thread.sleep() 会锁定 UI 1 秒,无论用户做什么都不会影响你的程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2016-02-15
      • 2016-03-14
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      相关资源
      最近更新 更多