Java: why is this code not working? Infinite loop?

前端 未结 2 1967
北荒
北荒 2021-01-23 01:08

So as you may be able to tell from my attempt, I\'m trying to figure out how I\'d make a program which gives the user 5 seconds to enter some lines of text, then the Scanner wil

2条回答
  •  隐瞒了意图╮
    2021-01-23 01:58

    Well this solution is not really good. but works.

    public class FiveSecond {
      public static void main(String args[]){
        new Thread(new Count(new Reader())).start();
      }
    }
    class Count implements Runnable{
      Reader r;Thread t;
      Robot ro;
      public Count(Reader t){this.r=t;
      try {
        ro=new Robot();
      } catch (AWTException e) {e.printStackTrace();}
      }
      @Override
      public void run() {
        t=new Thread(r);
        //t.setDaemon(true); //[S2]
        t.start();
        try{
        Thread.sleep(5000);
        }catch(Exception e){}
        t.interrupt();
        //Implicitly press the enter key in order to release the readLine() method :D
        //not recommended, and it's not a good idea, but works
        ro.keyPress(KeyEvent.VK_ENTER);
        ro.keyRelease(KeyEvent.VK_ENTER);
        /*
         * this is possible to save the strings lines in somewhere in order to access from invoker application
         * or send back the strings by socket, etc . . .
         */
        System.out.println("number of entered lines "+r.getCount()+"\n");
        //you would run this main as a process and get the number of counts 
        //System.exit(r.getCount()); //[S2]
      }
    }
    
    class Reader implements Runnable{
      private List lines;
      private volatile int count;
      private BufferedReader br;
      public Reader(){
        lines=new ArrayList();
        br=new BufferedReader(new InputStreamReader(System.in));
      }
      @Override
      public void run() {
        try{String line;
          System.out.println("you have 5 second to detect a 2048 length character, then your system will broken");
          while((line=br.readLine())!=null){
            if(!Thread.currentThread().isInterrupted()){
          count++;lines.add(line);}else{break;}
          }
          //for showing the lines entered
          //System.out.println(lines.toString());
        }catch(Exception ex){}
      }
      public int getCount(){return this.count;}  
    }
    

    but the best approach is about running a separated process to count the lines, and you would just remove the [S2] comments to achieve it.

提交回复
热议问题