gpt4 book ai didi

java - 删除添加到 System.out 的最后一个字符

转载 作者:行者123 更新时间:2023-12-01 15:02:04 25 4
gpt4 key购买 nike

我正在用 java 编写一个简单的客户端-服务器协议(protocol),并且现在正在处理服务器 CLI。我想要做的是在用户输入行的开头有一个 > 。我在控制台中打印 > 字符的函数是 consoleWriteln:

public static void consoleWriteln(String message) {
System.out.println(message);
System.out.print(">");
}

使用此功能,服务器启动,但该字符显示在每一行的开头。

Server running, listening on port 25565
>Tim has connected
>Boom
Server: Boom
>That's nice
Server: That's nice
>Tim: I agree!
>

当从客户端传入任何内容或从服务器 CLI 广播某些内容时,将调用上述函数。

我怎样才能只将它放在用户输入行上? IE:

Server running, listening on port 25565
Tim has connected
>Boom
Server: Boom
>That's nice
Server: That's nice
Tim: I agree!
>

最佳答案

您可以捕获 System.out,添加一个监听任何输出的线程,处理您的任务,然后执行 setOut(PrintStream out)

然后你让服务器直接输出到你在setOut中使用的PrintStream

这是我的一个项目中的一些代码:在服务器中,您将执行 serverOut.println()...

    if(OUTPUT_IN_OVERLAY_CONSOLE || OUTPUT_IN_FILE || !OUTPUT_IN_CONSOLE) {
try {
JFrame console = new JFrame("Console");
console.setSize(720,320);
final JTextArea tarea = new JTextArea();
JScrollPane scroll = new JScrollPane(tarea);
console.add(scroll);

final OutputStream consoleOut = System.out;
final OutputStream fileOut = new FileOutputStream("output.txt");
final OutputStream o = new OutputStream() {
StringBuilder sb = new StringBuilder();
@Override
public void write(int b) throws IOException {
sb.append((char)b);
tarea.setText(sb.toString());
tarea.setCaretPosition(sb.length());
//tarea.requestFocus();
}
};

OutputStream overrideOut = new OutputStream() {

@Override
public void write(int b) throws IOException {
if(OUTPUT_IN_CONSOLE) consoleOut.write(b);
if(OUTPUT_IN_OVERLAY_CONSOLE) o.write(b);
if(OUTPUT_IN_FILE) fileOut.write(b);
}
};
System.setOut(new PrintStream(overrideOut));

if(OUTPUT_IN_OVERLAY_CONSOLE) {
console.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
console.setVisible(true);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

而不是做System.setOut(new PrintStream(overrideOut)); ,创建一个扩展 PrintStream 的类并重写 println(String str) 方法以始终在开头添加一个“>”

关于java - 删除添加到 System.out 的最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com