2013-09-26 4 views
1

Я пишу GUI-консоль GUI, который должен запускаться в Windows и Linux. Символы, введенные в окно консоли, должны перейти к процессу, как только они будут напечатаны. Я использую функцию write() (с длиной 1), за которой следует flush(). Без флеша он не переходит к процессу, пока я не нажму <Enter>. Этот процесс повторяет обратные символы, поэтому я должен видеть их в консоли. Все отлично работает в Windows, но в Linux, по-видимому, он отправляет <CR> для каждого флеша(). Поскольку первое, что делает процесс, это получение пароля, он получает неправильный пароль после первого символа (потому что отправляется <CR>).Использование BufferedWriter.flush() в Linux отправляет возврат каретки

Если я пропустил флеш, он работает, но введенный текст не отображается в консоли до следующего <Enter>.

Может ли кто-нибудь помочь с тем, как избежать этих <CR> s для отправки с помощью флеша()?

Большое спасибо!

Пример кода:

 BufferedWriter writer; 
     ...... 
     @Override 
     public boolean dispatchKeyEvent(KeyEvent e) { 
      switch(e.getID()) { 
       case KeyEvent.KEY_TYPED: 
       byte b; 
       b = (byte)e.getKeyChar(); 
       try { 
        writer.write(b); 
        writer.flush(); 
       } catch (IOException ex) { 
       } 
       break; 
      } 
      return true; 
     } 
+0

Если вы проверите код, BufferedWriter.flush() будет таким же на linux и windows и добавит любые символы. Возможно, что ввод программы linux ведет себя по-разному, когда данные очищаются, но проблема вряд ли будет на стороне java. –

ответ

1

Вы читаете входы по линии? Не могли бы вы дать нам код, где вы делаете flush() и что вы делаете перед ним? По тому, как вы объяснили, это похоже на то, что flush() нажимает на поток, когда flush() не будет толкать что-либо, что еще не находится в буфере. Поэтому я, вероятно, проверю, попало ли там туда, прежде чем вы начнете его промывать.

+0

Я добавил образец кода в мое исходное сообщение –

+0

Я не мог ничего увидеть в этом коде. несколько указателей: можете ли вы регистрировать события AWT как в Windows, так и в Linux? Или посмотрите, сколько раз запускается событие KEY_TYPED? Кроме того, вместо того, чтобы повторять символы на консоли, если возможно, вы могли бы записать их в файл и посмотреть, все ли вы видите ? Я заезжаю: Один байт не может удерживать как введенный ключ, так и . – prabugp

Смежные вопросы