接続ごとに新しいスレッドを作成する必要があります。スレッドは、クライアント入力を待機しているrun()にある場合でも、ソケットに書き込む関数を持っている必要がありますString clientCommand = in.readLine()
。関数update
はこの要件を満たし、を使用してソケットに書き込むことができる必要がありますが、スレッドコンストラクターで設定した場合でもPrintWriter outWr
そうであるようです。null
コンストラクターで初期化できませんPrintWriter outWr
。try
建設後outWr
はまだnull
です。それを修正する方法は?
public class Server {
public static void main(String[] args) {
...
ClientServiceThread cliThread = new ClientServiceThread(clientSocket, id++, auction);
...
}
public class ClientServiceThread extends Thread {
private PrintWriter outWr;
ClientServiceThread(Socket s, int clientID, Auction a) {
try {
PrintWriter outWr = new PrintWriter(new OutputStreamWriter(
m_clientSocket.getOutputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {....; String clientCommand = in.readLine(); ... }
public void update(String msg){outWr.println(msg);}