title: How to continuously scan input into console?
body: <p>I have taken a task upon myself to learn Java. My idea was to create a simple game with only the text console. The "AI" (timer) will periodically send a string and the player has to write a correct string in response, otherwise s/he loses a life.</p>
  
  <p>My first question therefore is: Is there a simple way to combine timer and scanner? I need it to constantly "watch" the console line for strings.</p>
  
  <p>After some time of searching and tries where I mostly struggled to scan the text while generating or generate strings while scanning I found following code but it has an issue at: </p>
  
  <pre><code>if ((name =in.nextLine(2000)) ==null)
  </code></pre>
  
  <p>If I rewrite the condition to, for example, compare to !="a" instead of null, the code just ignores the condition and always writes "Too slow!" no matter what. If it is =="a" it always says Hello, a. I completely don't understand why, it seems to ignore the logic.
   So the second question would have been, why does it ignore the logic when it is different? And how do I fix it?</p>
  
  <pre><code>public class TimedScanner
  {
      public TimedScanner(InputStream input)
      {
          in = new Scanner(input);
      }
  
      private Scanner in;
      private ExecutorService ex = Executors.newSingleThreadExecutor(new ThreadFactory()
      {
          @Override
          public Thread newThread(Runnable r)
          {
              Thread t = new Thread(r);
              t.setDaemon(true);
              return t;
          }
      });
  
      public static void main(String[] args) {
          TimedScanner in = new TimedScanner(System.in);
          int playerHealth = 5;
          System.out.print("Enter your name: ");
          try {
              while (playerHealth &gt; 0) {
                  String name = null;
                  if ((name = in.nextLine(3000)) ==null) {
                      System.out.println(name);
                      System.out.println("Too slow!");
                      playerHealth--;
                  } else {
                      System.out.println(name);
                      System.out.println("Hello, " + name);
                  }
              }
          } catch (InterruptedException | ExecutionException e) {
              //TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
  
      public String nextLine(int timeout) throws InterruptedException, ExecutionException
      {
          Future&lt;String&gt; result = ex.submit(new Worker());
          try
          {
              return result.get(timeout, TimeUnit.MILLISECONDS);
          }
          catch (TimeoutException e)
          {
              return null;
          }
      }
  
      private class Worker implements Callable&lt;String&gt;
      {
          @Override
          public String call() throws Exception
          {
              return in.nextLine();
          }
      }
  }
  </code></pre>
  
  <p>This is very barebones idea of what it should do. In the while I plan to put in a randomly picked string, that will be compared with the console input and wrong input = playerHealth--; correct input something else.</p>