Java System.in不使用自定义流

Java System.in不使用自定义流,java,io,system.in,Java,Io,System.in,我目前正在用Java设计一个聊天应用程序。因此,我创建了自己的JFrame。写入System.out的所有内容都写入JTextArea,我想重定向System.in以使用我的JTextField。我编写了一个简单的类来处理这个问题: public class InputField extends InputStream implements KeyListener { private JTextField textField; private String text = null

我目前正在用Java设计一个聊天应用程序。因此,我创建了自己的JFrame。写入System.out的所有内容都写入JTextArea,我想重定向System.in以使用我的JTextField。我编写了一个简单的类来处理这个问题:

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){}
我第一次输入任何文本并按enter键时,它工作正常。输出消息后,将调用read函数,但如果我尝试输入更多文本,则不再调用read函数。有什么建议可以解决这个问题吗


查看图像。

第一次按enter键时,它会将文本设置为。然后,该块设置b=-1:


这是read返回的值,它使主循环完成。

我假设这是因为您的读取机制在第一次遇到-1时停止,这发生在您完成发送第一条消息时。在这之后,你永远不会重新启动读卡器,你也永远不会完全重置你的输入流,因为文本不会为空,所以它不会在读取时阻塞,我添加了一个图像作为参考。看一看,我真的不知道这个图像会有什么帮助。但是当我按enter键时,文本会发生变化,如果不是,那么b等于文本的第一个字符。
if (Objects.equals(text, "")) {
        b = -1;