2013-05-05 2 views
0

Итак, я пытаюсь перенаправить текстовое поле в System.in. Я видел эту тему Redirect System.in to swing component, и, кажется, все работает:Переадресация Java System.in - InputStream.read, но ничего «возвращено»

private class SystemIn extends InputStream { 

    @Override 
    public int read() { 
     int x = GUIConsole.this.read(); 
     System.out.println("Read called: returning " + x); 
     return x; 
    } 

} 

чтениями, кажется, выполняет правильно: у меня есть помощник

public static String readLine(String msg) { 
    String input = ""; 
    InputStreamReader converter = new InputStreamReader(System.in); 
    BufferedReader in = new BufferedReader(converter); 

    while (input.length() == 0) { 
     try { 
      print(msg); 
      input = in.readLine().trim(); 
     } catch (Exception ignore) { 
      // 
     } 
    } 
    return input; 
} 

И я называю

String in3 = SimpleConsole.readLine("Enter text: "); 
System.out.println("You said: " + in3); 

Печатается "Read called: returning #". Я получаю правильные коды символов, за которыми следует финальный -1, когда я что-то вызываю. Метод чтения блокируется до тех пор, пока вход не будет готов, как указано в документах.

Однако, я только получить "Read called..." сообщения и следующую строку ("You said... «) никогда не выполняет (он застрял еще чтение) я не могу для своей жизни выяснить, что проблема есть. - Если вы хотите увидеть больше код (хотя я думаю, что "Read called..." сообщения показывают, что он делает правильно) просто дайте мне знать.

есть ли что-то еще, что я должен сделать, чтобы быть в состоянии назвать readLine и получить ввод из текстового поля? Я также попытался переопределяя другие методы во входном потоке без везения (опять же, метод read выполняется должным образом)

ответ

0

Аг, как обычно, я нахожу Ответ вскоре после того, как я поставил вопрос (и я говорю это каждый раз тоже). В любом случае, если кто-то еще ищет это:

При чтении/реализации входного потока убедитесь, что последний вызов возвращает символ новой строки \n' (далее следует -1). Потому что, если вы читаете строку , она ждет этого последнего фида.

Для этого я добавляю текст с текстового поля plus символ новой строки. Теперь он работает, программа заканчивает чтение и печать окончательного сообщения.

+0

Похоже, что это ваш резиновый утиный отладчик. (-: См .: http://en.wikipedia.org/wiki/Rubber_duck_debugging –