java - 聊天客户端如何禁止用户名被二次使用?

标签 java multithreading swing methods wait

当输入用户名并按下连接按钮时:

public connect{...
sock = new Socket("77.70.65.222", 5000);
InputStreamReader streamreader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(streamreader);
writer = new PrintWriter(sock.getOutputStream());
Thread IncomingReader = new Thread(new IncomingReader());
IncomingReader.start();
writer.println("``connecto"); 
//sends message to server, which sends back a message ,which when read by my 
//IncomingReader class(implements Runnable) prints online users in "onlineUsersArea"
writer.flush();
String[] a = onlineUsersArea.getText().split("\n");
for(String s:a){if(s.equals(username)) throw new Exception();}
//throws an exception if the selected username exists
writer.println(username + "`has connected.`Connect"); // Displays to everyone that user connected.
writer.flush(); // flushes the buffer
...}

问题在于该方法不等待 IncomingReader 打印在线用户,因此 a[] 在该方法完成之前不包含任何内容。 我该怎么做才能让它等待 IncomingReader 然后从 writer.flush(); 继续 如果我添加一个 IncomingReader.join();,在我按下连接按钮后,客户端停止响应。
如果我有另一种方法来阻止用户使用已经使用过的用户名,我会非常高兴听到它。 提前致谢!

最佳答案

这只是一次尝试,但如果您在其他线程上运行编写器呢? 我认为问题可能是主线程在等待其他线程完成作业时被阻塞。

(提示:如果我是你,我不会使用抛出简单的 Exception-s。定义一个新的 Exception 类型并在需要时处理该类型。)

关于java - 聊天客户端如何禁止用户名被二次使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670797/

相关文章:

Java - 尝试理解码合

java - netbeans 中的错误 UnsupportedClassVersionError

java - 使用等待和通知终止生产者消费者设置

java - ExecutorService调用所有线程池问题

java - 如何删除 JButton 矩阵中的 JButton?

java - 检查一个 java.lang.reflect.Type 的对象是否可以转换为另一个的组件?

java - 如何等待一段时间,然后才返回默认值?

java - JAVA如何知道哪个列表被选中

java - 如何让我的小程序将用户的输入转换为整数并将其与计算机的随机数进行比较?

java.security.NoSuchAlgorithmException : Cannot find any provider supporting RSA/NONE/PKCS1Padding in jar-file