0

私は、電話と PC の間で一種のチャット アプリを作成しています。電話から受信するために、ソケットをセットアップして に取得しoutputStreamDataOutputStreamから文字列をポーリングし、LinkedBlokingQueueを使用して送信しますwriteUTF()。しかし、何らかの理由で、実行中にヌルポインター例外が発生しますdataOutputStream.writeUTF(input)

コードは次のとおりです。

public class txThread extends Thread{
    private LinkedBlockingQueue activityQueue;
    private Socket socket;
    private String input;

    public txThread(LinkedBlockingQueue activityQueue){
        this.activityQueue = activityQueue;
        socket = null;
        input = null;
    }

    public void run(){
        DataOutputStream dataOutputStream = null;
        try {
            socket = new Socket("192.168.1.8",1755);
            Log.d("DEBUG","THREAD_TX_CONNECTED");
            dataOutputStream = new DataOutputStream(socket.getOutputStream());
            while(true){
                input = (String) activityQueue.poll();
                dataOutputStream.writeUTF(input);
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally{
            if (socket != null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
        if (dataOutputStream != null){
            try {
                dataOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        }
        return;
    }
}
4

1 に答える 1

1

キューに最初のアイテムがない場合にactivityQueue.poll()返されるここでは必要ないと思います。null

この両端キューによって表されるキューの先頭 (つまり、この両端キューの最初の要素) を取得して削除するか、この両端キューが空の場合は null を返します。

キューにアイテムがあるのを待つループで使用activityQueue.take()する必要があると思います:while(true)

この両端キューによって表されるキューの先頭 (つまり、この両端キューの最初の要素) を取得して削除し、必要に応じて要素が使用可能になるまで待機します。

于 2012-04-30T12:23:11.133 に答える