擦除控制台文本java

时间:2015-01-13 04:50:41

标签: java cmd terminal console erase

我在java中创建console chat program。接受用户文本输入并发送到服务器,服务器然后将其广播到所有客户端。 我想删除用户在其控制台上输入的文字。

我更喜欢独立于平台的解决方案。

import java.io.*;
class Test
{
    public static void main(String args[])
    {
    System.out.print("you: ");
    String t=getString();
    System.out.println("We accepted : " + t);
    }
    static String getString()
     {
    String s;
    try{
        BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
        s = bufferRead.readLine();
        //int count = 1; 
        //System.out.print(String.format("\033[%dA",count)); // Move up
        //System.out.print("\033[2K");        // Erase line content, works on terminal but not on cmd
        for(int i=0;i<s.length();i++)
            System.out.print("\b");     //dont know, why it doesnt works??
        }   
    catch(IOException e)
        {e.printStackTrace(); s="Error";}
        return s;
    }
}

1 个答案:

答案 0 :(得分:1)

这是我对你的问题的解释:

我是客户,我输入了一条消息“你好。”其他人都看到“你好”。但是,通过在我的控制台中键入“Hello”,消息已经存在。我不想在播音员的屏幕上看到另一个“你好”。

这是你想要实现的功能吗?如果是这样,我建议您不要删除该消息。如果您已将某些内容打印到控制台,则擦除它可能并不容易。相反,你可能永远不会发送它。

以下是我通常用于邮件系统的内容,您不希望发件人两次查看其邮件:

方便的是,每个连接到服务器的人都有一个member对象,每个member都有一个名称。希望名字是独一无二的。现在,如果您确保在连接到服务器时标识每个成员的名称,那么当您向所有人宣布该消息时,您只需确保不向发件人宣布该消息。

具体来说,我会修改run()类的构造函数和announcer方法:

String message;
String senderName;

announcer( member x , String msg ) {
    senderName = x.name;
    message= x.name + " : " + msg ;
}

public void run() {
    for ( int i=0 ; i<server.group.size() ; i++ ) {
        if ( !server.group.get( i ).name.equals( senderName ) ) {
            send( server.group.get( i ).sck );
        }
    }
}

现在,邮件将发送给除发件人之外的所有人,从而实现将其发送给发件人然后删除它的相同结果。如果你必须编写更多代码来正确设置每个人的名字,我很抱歉,但我还没有听说任何重复消息只是从标准输出中“删除”的实现。

或者,如果您的server.group个对象与传递给播音员构造函数的member个对象相同,那么这将有效

String message;
member sender;

announcer( member x , String msg ) {
    sender = x;
    message= x.name + " : " + msg ;
}

public void run() {
    for ( int i=0 ; i<server.group.size() ; i++ ) {
        if ( server.group.get( i ) != sender ) {
            send( server.group.get( i ).sck );
        }
    }
}