1

わかりました、私は以前にJavaでスレッド化を行ったことがありますが、正しいはずだと思う何かが私にこのエラーを与えています


package com.mdog.tcpserver;
import java.net.*;
import java.io.*;

public class ServerDriver {


     public static void main(String[] args) throws IOException {

         ServerSocket serverSocket = null;
         boolean listening = true;

         /* bind welcome socket to port */
         try {
             serverSocket = new ServerSocket(1313);
         } catch (IOException e) {
             System.err.println("Could not listen on port: 1313.");
             System.exit(1);
         }


         /* assign thread to each client */
         while(listening){
         new ServerWorker(serverSocket.accept()).start();
         }

         /* close the socket and quit */
         serverSocket.close();
         return;
 }
}





----------


package com.mdog.tcpserver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ServerWorker implements Runnable {

    private Socket socket = null;

 public ServerWorker(Socket s){
  super();
  this.socket = s;
 }



 public void run() {

         (stuff happens)

    } 
}



エラーはこの行にあります "new ServerWorker(serverSocket.accept()).start();" そしてそれは言う...「メソッドstart()はタイプServerWorkerに対して未定義です」

4

2 に答える 2

3

new Thread(new ServerWorker(serverSocket.accept())).start()

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Thread.html#start%28%29

于 2011-01-15T20:24:38.197 に答える
1

コメントにコメントを追加する方法がわかりません。しかし

while サイクルで新しいスレッドを開始する??? このコードはすぐにクラッシュすると思います

間違っている。accept() ブロック。新しいソケット (別名接続クライアント) ごとに、新しいスレッドが作成されます (または、既に与えられた正解が指摘しているように)。この場合は適切である限り、while ループと他のループで新しいスレッドを開始しても問題はありません。

于 2011-01-15T20:43:41.580 に答える