聊天应用程序,如何避免弄乱输出

时间:2010-01-21 23:19:47

标签: java chat

我有典型的聊天应用程序。

客户端使用两个线程实现。

线程1

do {

 show menu
 read option
 case option
  1: option1
  2: option2
  .
  .
  . 
  5:end
     end case
while (!end)

主题2:

do {

 read message from socket
 display message
while (!end)

一个问题是Thread1要快,所以在处理选项之后它再次显示菜单,然后Thread2才能显示它的消息。 我通过让Thread1睡眠1000毫秒来解决这个问题,但不知道是否有更好的方法可以做到这一点。

另一个是:当客户端什么都不做时,屏幕上只有一条消息要求处理选项。如果另一个客户端向他发送消息,则此消息显示在promt之后,因此信息很混乱:这是客户在从另一个客户端收到消息后将看到的内容的示例。

1.- Print users conected  
2.- Send message to all  
3.- Send message to a user  
4.- Quit  
Choose an option: Message received from user "david": hello!  

有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您的第一个问题可以通过线程同步来解决。这是一个沉重的主题,但线程一般,所以支持自己的一些学习

线程1
等待用户做出选择
用户做出选择
过程 - >通知线程2处理
等待线程2没问题 等待用户做出一个chocie

线程2
等待线程1的处理 通过插座发送数据
通知线程1它没问题 等待从线程1处理

你的第二个问题可以用gui来解决。没有很多基于控制台的聊天程序,这是有原因的。 unix系统有ncurses来处理控制台中的文本定位,但是windows只有hacks相当于ncurses。你可能想看一下

答案 1 :(得分:0)

如果您的线程与管道通信,您可以让第一个线程等待第二个线程说“我已经完成了。”