ユーザー名を入力して接続ボタンを押すと、次のようになります。
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();
と、接続ボタンを押した後、クライアントが応答を停止します。
ユーザーがすでに使用されているユーザー名を使用できないようにする別の方法があれば、それを聞いて非常にうれしく思います。前もって感謝します!