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 的值,它使您的主循环结束。