0

接続ごとに新しいスレッドを作成する必要があります。スレッドは、クライアント入力を待機しているrun()にある場合でも、ソケットに書き込む関数を持っている必要がありますString clientCommand = in.readLine()。関数updateはこの要件を満たし、を使用してソケットに書き込むことができる必要がありますが、スレッドコンストラクターで設定した場合でもPrintWriter outWrそうであるようです。nullコンストラクターで初期化できませんPrintWriter outWrtry建設後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);}
4

1 に答える 1

4

このコードを見てください

public class ClientServiceThread extends Thread  {
private PrintWriter outWr;

ClientServiceThread(Socket s, int clientID, Auction a) {
        try {
            PrintWriter outWr = new PrintWriter(new OutputStreamWriter(

コンストラクターでは、クラスフィールドではなく、ローカル参照を初期化します。PrintWriter outWr

に変更します

        try {
            outWr = new PrintWriter(new OutputStreamWriter(
于 2012-06-02T23:50:23.963 に答える