0

私はマルチスレッドを実装しており、メインから各スレッドとの間でメッセージを送受信できるようにしたいと考えています。したがって、次のコードを使用して、各スレッドのブロッキング キューを設定しようとしています。

 public static void main(String args[]) throws Exception {
    int deviceCount = 5;
    devices = new DeviceThread[deviceCount];
    BlockingQueue<String>[] queue = new LinkedBlockingQueue[5];

    for (int j = 0; j<deviceCount; j++){
        device = dlist.getDevice(); //get device from a device list
        devices[j] = new DeviceThread(queue[j], device.deviceIP, port, device.deviceID, device.password);
        queue[j].put("quit");
    }
}


public class DeviceThread implements Runnable {
    Thread t;
    String ipAddr;
    int port;
    int deviceID;
    String device;
    String password;
    BlockingQueue<String> queue;


    DeviceThread(BlockingQueue<String> q, String ipAddr, int port, int deviceID, String password) {

        this.queue=q;
        this.ipAddr = ipAddr;
        this.port = port;
        this.deviceID = deviceID;
        this.password = password;
        device = "device"+this.deviceID;
        t = new Thread(this, device);
        System.out.println("device created: "+ t);
        t.start(); // Start the thread
    }

    public void run() {
        while(true){
             System.out.println(device + " outputs: ");
             try{
                 Thread.sleep(50);
                 String input =null;
                 input = queue.take();
                 System.out.println(device +"queue : "+ input);
             }catch (InterruptedException a) {

             }

        }

   }
}

コードはコンパイルされましたが、実行時に行に NullPointerException が表示されますqueue[j].put("quit");

1つのキューだけで機能しましたBlockingQueue queue = new LinkedBlockingQueue(5);

配列が適切に初期化されていないためだと思います。宣言しようとしましBlockingQueue[] queue = new LinkedBlockingQueue10;たが、「;が期待されています」と表示されます

誰もこれを修正する方法を知っていますか? netbeans IDE 7.3.1 を使用しています。

ありがとう。

4

1 に答える 1

4
 BlockingQueue<String>[] queue = new LinkedBlockingQueue[5];

null 参照の配列を作成します。それぞれを実際に初期化する必要があります。

for(int i=0; i<queue.length; i++){
    queue[i]=new LinkedBlockingQueue(); //change constructor as needed
}
于 2013-07-23T16:27:59.670 に答える