code: public static Callable<String> getCallWTimeout(BufferedReader reader, int timeout, HasPrompt emptyPrint){
  		return new Callable<String>() {
  			@Override
  			public String call() throws IOException {
  				String ret = "";
  				while("".equals(ret)){
  					try{
  						while(!reader.ready()){
  							Thread.sleep(timeout);
  						}
  						ret = reader.readLine();
  						if("".equals(ret) && emptyPrint!=null){
  							System.out.print(emptyPrint.prompt());
  						}
  					}
  					catch (InterruptedException e) {
  						return null;
  					}
  				}
  				return ret;
  			}
  		};
  	}
docs: Returns a new callable for reading strings from a reader with a given timeout.
  @param reader input stream to read from
  @param timeout read timeout in milliseconds, very low numbers and 0 are accepted but might result in strange behavior
  @param emptyPrint a printout to realize on an empty readline string, for prompts, set null if not required
  @return null if input stream is null, results of read on input stream otherwise