현재 Java로 채팅 응용 프로그램을 설계하고 있습니다. 따라서 나는 JFrame
을 만들었습니다. System.out
에 쓰여진 모든 내용은 JTextArea
에 쓰여지고 System.in
은 JTextField
으로 리디렉션하고 싶습니다.Java System.in이 사용자 정의 스트림과 작동하지 않습니다.
public class InputField extends InputStream implements KeyListener {
private JTextField textField;
private String text = null;
public InputField(JTextField textField){
this.textField = textField;
textField.addKeyListener(this);
}
@Override
public int read() throws IOException {
//System.out.println("CALLED!");
while (text == null)
;
int b;
if (Objects.equals(text, "")) {
b = -1;
text = null;
} else {
b = text.charAt(0);
text = text.substring(1, text.length());
}
// System.out.println("GIVING: " + b);
return b;
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
text = textField.getText();
System.out.println("ENTER: "+ text);
textField.setText("");
}
}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyReleased(KeyEvent e) {}
}
내 독서 메커니즘 :
StringBuilder cmd = new StringBuilder();
int b;
try {
while ((b = System.in.read()) != -1)
cmd.append(b);
// Do something with cmd
} catch (IOException e){}
첫 번째 시간 I 입력 텍스트 입력하고 Enter 키를 누릅니다, 그냥 잘 작동 나는이 문제를 처리해야하는지 간단한 클래스를 썼다. 메시지를 출력 한 후 read()
함수가 호출되었지만 더 많은 텍스트를 입력하려고 시도하면 read()
함수가 더 이상 호출되지 않습니다. 이 문제를 해결할 제안이 있습니까?
this 이미지를보십시오.
첫 번째 메시지를 "보내기"를 마친 시점에서 처음으로 '-1'을 만나면 읽기 메커니즘이 중지되기 때문입니다. 그리고 그 후에는 독자를 절대 다시 시작하지 않고 입력 스트림을 완전히 재설정하지 않습니다 ('text'가 null이 아니기 때문에 더 이상 읽기를 차단하지 않습니다). –
이미지를 참조로 추가했습니다. 그걸보세요 –
그 이미지가 어떻게 도움이 될지 전혀 모르겠습니다. –