キューの実装があります。デキューを実行するには、poll() API を使用してヘッドを削除しますが、NoSuchElementException をスローしてはなりません。なぜこれが起こるのか誰にも説明できますか?キューにデキューするのに十分なデータがあります。
protected boolean enQueue(ByteBuffer data){
if (queue.offer(data)){
return true;
}else {
return false;
}
}
protected ByteBuffer deQueue(){
ByteBuffer data = null;
try{
if(getQueueCount() > 0)
{
data = queue.poll();
if(data != null){
return data;
}else {
return null;
}
}
else{
return null;
}
}
catch(NoSuchElementException e){
e.printStackTrace();
return null;
}
}
編集:
java.util.Queue<ByteBuffer> queue;
public Queue(){
queue = new LinkedList<ByteBuffer>();
}
protected int getQueueCount(){
return queue.size();
}
スタックトレース:
03-04 14:58:50.205: W/System.err(7937): java.util.NoSuchElementException 03-04 14:58:50.205: W/System.err(7937): java.util.LinkedList.removeFirstImpl ( LinkedList.java:689) 03-04 14:58:50.205: W/System.err(7937): java.util.LinkedList.removeFirst(LinkedList.java:676) 03-04 14:58:50.205: W/ System.err(7937): java.util.LinkedList.poll(LinkedList.java:895) 03-04 14:58:50.205: W/System.err(7937): com.android.testapp.Queue.deQueue で(Queue.java:37) 03-04 14:58:50.205: W/System.err(7937): com.android.testapp.DisplayData.run (LogViewActivity.java:1164) で
編集2:
エンキュー
Queue.getInstance().enQueue(tempByteBufRead);
これは、Bluetooth を介して受信したデータを bluetooth.class のキューに入れるために使用します。tempByteBufRead は Bytebuffer です。そして、これは別のスレッドで行われます。
デキュー
while( Queue.getInstance().getQueueCount() <= 0);
try {
if(LLTestAppActivity.DEBUG){
Log.d("DisplayData", "Crossed queue count...");
}
ByteBuffer tempByteBuf = Queue.getInstance().deQueue();
if(null == tempByteBuf){
Log.d("DisplayData", "No data in queue...");
}
else{
//TODO:
}
}catch(){}
これが私がデキューする方法です。これは別のクラスファイルにあります。これは、テキスト ビューにデータを表示するために使用される別のスレッドです。