Я пишу 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;
}
Если вы проверите код, BufferedWriter.flush() будет таким же на linux и windows и добавит любые символы. Возможно, что ввод программы linux ведет себя по-разному, когда данные очищаются, но проблема вряд ли будет на стороне java. –