Java System.in 无法使用自定义流
Java System.in not working with custom stream
我目前正在 Java 设计聊天应用程序。因此我创建了自己的 JFrame
。写入 System.out
的所有内容都写入了 JTextArea
,我想重定向 System.in
以使用我的 JTextField
。我写了一个简单的 class 应该如何处理这个:
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){}
我第一次输入任何文本并按回车键时,它工作得很好。输出消息后,调用 read()
函数,但如果我尝试输入更多文本,则不再调用 read()
函数。有什么解决这个问题的建议吗?
看看 this 图片。
第一次按回车键时,它会将 text
设置为 ""
。然后这个块设置 b = -1
:
if (Objects.equals(text, "")) {
b = -1;
这是 read
returns 的值,它使您的主循环结束。
我目前正在 Java 设计聊天应用程序。因此我创建了自己的 JFrame
。写入 System.out
的所有内容都写入了 JTextArea
,我想重定向 System.in
以使用我的 JTextField
。我写了一个简单的 class 应该如何处理这个:
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){}
我第一次输入任何文本并按回车键时,它工作得很好。输出消息后,调用 read()
函数,但如果我尝试输入更多文本,则不再调用 read()
函数。有什么解决这个问题的建议吗?
看看 this 图片。
第一次按回车键时,它会将 text
设置为 ""
。然后这个块设置 b = -1
:
if (Objects.equals(text, "")) {
b = -1;
这是 read
returns 的值,它使您的主循环结束。