0
LinkedList<DatagramPacket> queue = new LinkedList<DatagramPacket>();

for (int i = 0; i < queue.size(); i++)
{
    System.out.println("1: This prints.");
    System.out.println("2: This doesn't: " + new String(queue.get(i).getData()));
    int start = (new String(queue.get(i).getData())).indexOf("\r\n") + "\r\n".length();
    data.concat(new String(queue.get(i).getData()).substring(start));
}

queueパケットのリストからすべてのデータを取得し、それらすべてを 1 つの文字列にまとめようとしています。

しかし、2 番目 (その下の行と同じ) に到達するたびにprintln、プログラムはハングし、何もしません。

getData()印刷なしで動作します。例えば。

System.out.printlin("2: This doesn't: " +  new String(queue.get(i)));

また、キューにパケットを追加するたびに、キュー内の最後のパケットをすぐに印刷しますが、これは機能します。

public void addPacket(DatagramPacket additional)
{
    queue.add(additional);
    System.out.println("1: " + new String(queue.getLast().getData()));
}
4

1 に答える 1

0

クラスについてはよくわかりませんが、これにより、操作にDatagramPacket関連するいくつかのパフォーマンスの問題が確実に修正されます。プログラムの実行が非常に遅いだけかもしれません。StringLinkedList.get

StringBuilder dataBuilder = new StringBuilder(); 
Iterator<DatagramPacket> queueIter = queue.iterator();
while(queueIter.hasNext()) {
  DatagramPacket next = queueIter.next();
  System.out.println("1: This prints.");
  System.out.println("2: This doesn't: " + new String(next.getData()));
  int start = (new String(next.getData())).indexOf("\r\n") + "\r\n".length();
  dataBuilder.append(new String(next.getData()).substring(start));
}
data = dataBuilder.toString();

これを試してみたらどうですか:

public class Foo {
  // instead of LinkedList<DatagramPacket>
  public LinkedList<String> queue = new LinkedList<String>(); 
  public void addPacket(DatagramPacket additional) {
      queue.add(new String(additional.getData()));
    }
  }
}
于 2012-11-30T20:54:53.037 に答える