Кажется очень странным направлять OutputStream в нечто вроде текстового поля в графическом интерфейсе. Вы уверены, что это то, что вы действительно хотите? Если вы хотите захватить что-то, записываемое в Writer, обычно подходит StringWriter . Вы просто позволяете писать, затем вызываете toString () , чтобы получить окончательный результат. Если вы действительно ищете способ записать материал в текстовое поле, как оно записано в Writer / OutputStream, то проверьте это:
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame("I be streamin!");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField field = new JTextField();
frame.add(field);
frame.pack();
frame.setVisible(true);
System.out.println("Enter stuff to write to the field");
char c;
InputStreamReader in = new InputStreamReader(System.in, "UTF-8");
while ((c = (char) in.read()) != -1) {
String currentText = field.getText();
field.setText(currentText + c);
Thread.sleep(250);
}
}
Примечание 1: используйте правильную кодировку вместо UTF-8.
Примечание 2: Хотя я замедлил это с помощью Thread.sleep (), запись символа за раз в поле несколько расточительна сама по себе, потому что вы постоянно создаете и выбрасываете строки. Выполнение небольшого объема буферизации, например использование StringWriter, как я упоминал ранее, может быть лучшим подходом, если только вы не чувствуете «живую подачу», когда вещи появляются, когда они читаются.