0

我正在写一种手机和电脑之间的聊天应用程序。为了从手机接收,我设置了一个套接字并将其outputStream放入 aDataOutputStream中,从 a 轮询字符串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 回答