2015-01-13 8 views
1

나는 java에서 console chat program을 만들고있다. 사용자 텍스트 입력을 받아서 서버, 서버로 전송 한 다음이를 모든 클라이언트에 보냅니다. 사용자가 입력 한 텍스트를 콘솔에서 지우고 싶습니다.콘솔 텍스트 지우기 java

플랫폼 독립적 솔루션을 선호합니다. 나는 클라이언트와 나는이 메시지를 입력

:

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; 
    } 
} 
+0

를 작동합니다/7522022/how-to-delete-stuff-printed-to-system-out-println 위의 문제는 해결되지 않습니다. – Nilesh

+1

[Java Curses] (http://sourceforge.net/projects/javacurses/)를 사용하여이 작업을 수행 할 수 있다고 생각합니다. 'Graphics'를 사용하여 콘솔을 그리지 않는 한 어떤 종류의 터미널 추상화와 연결해야합니다. –

답변

1

이것은 귀하의 질문에 대한 나의 해석이다 "안녕하세요." 다른 모든 사람들은 "Hello"를 봅니다. 그러나 내 콘솔에 "Hello"를 입력하면 메시지가 이미 있습니다. 나는 아나운서에게서 나의 스크린에 또 다른 "안녕하세요"가 나타나길 바라지 않는다.

달성하고자하는 기능입니까? 그렇다면 메시지를 지우지 말 것을 제안합니다. 콘솔에 무엇인가를 인쇄했다면 지우는 것이 그렇게 쉽지 않을 수 있습니다. 오히려 당신은 처음부터 그것을 보낼 수 없습니다.

다음

내가 일반적으로 두 번 자신의 메시지를 확인하기 위해 보낸 사람 싶지 않아하는 메시징 시스템에 사용한 것입니다 : 편리

을, 당신은 서버에 연결된 각 사용자에 대한 member 객체를 가지고 있고, 각 member에는 이름이 있습니다. 희망적인 이름은 고유 할 것입니다. 이제 모든 구성원이 서버에 연결할 때 이름으로 식별되면 모든 사람에게 메시지를 알릴 때 보낸 사람에게 알리지 않도록합니다.

특히, 내가 생성자와 announcer 클래스의 run() 방법 수정 것입니다 : 이제

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 객체와 같은 경우

또는, 다음이이 질문은 http://stackoverflow.com/questions의 중복되지

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); 
     } 
    } 
} 
+0

TYSM @ user2570465. 위의 방법은 [내 경우] (https://github.com/TheniL/group-chat)에서 작동했습니다. 하지만 ** msg 맨손으로 보입니다 (왼쪽에 제목 없음) ** 콘솔의 마지막 줄에 항상'you : _'가 표시되면 좋을 것 같습니다. 나중에 같은 메시지가 피드에 입력됩니다 ... 'System.out.print ("\ r");'를 사용했지만 여전히 문제가 남아 있습니다. 절반 유형의 msg는 콘솔에서 사라지지만 버퍼에 남아 있습니다. 해결 방법을 알려주시겠습니까? – Nilesh

+0

@niLesh 죄송합니다, 이해가 안됩니다. 캡쳐 화면을 게시하고 문제를 동그라미로 표시 할 수 있습니까? 감사. – user2570465

+0

가능한 경우 업데이트 된 소스를 다시 컴파일하십시오. – Nilesh