java.util.NoSuchElementException at java.util.concurrent.ConcurrentLinkedDeque.screenNullResult(ConcurrentLinkedDeque.java:810) at java.util.concurrent.ConcurrentLinkedDeque.removeFirst(ConcurrentLinkedDeque.java:990) at java.util.concurrent.ConcurrentLinkedDeque.pop(ConcurrentLinkedDeque.java:1036) at GrblCommunicator.streamCommands(GrblCommunicator.java:167) at GrblCommunicator.responseMessage(GrblCommunicator.java:240) at ResponseMessageHandler.handleResponse(ResponseMessageHandler.java:33) at SerialConnectionJserial.serialEvent(SerialConnectionJserial.java:114) at com.fazecast.jSerialComm.SerialPort$SerialPortEventListener.waitForSerialEvent(SerialPort.java:1391) at com.fazecast.jSerialComm.SerialPort$SerialPortEventListener$1.run(SerialPort.java:1295)
4 Réponses :
Il n'est pas possible pour vous de jeter un coup d'œil sur un élément dans une liste lié et que vous avez la taille de celle-ci. Pensez à ce que vous dites - "Comment puis-je regarder cette valeur et que la liste n'a aucune valeur?". La raison en est que Ceci imprime: P> peek () code> récupère le premier élément de la liste mais ne le supprime pas. Cependant, em>, vous recherchez peut-être
pop () code> à la place. Utilisation de
POP () code> Vous pouvez récupérer et supprimer le premier élément en même temps. Par la documentation ici "Pops un élément de la pile représentée par cette liste. En d'autres termes, supprime et renvoie le premier élément de cette liste".
String: blablabla, Size: 0
Ouais. Mais c'est une question de débogage. Peek () Renvoyer une valeur et une taille () est 0 ...
Si vous avez absolument besoin de retourner une valeur lorsque la taille est 0, vous avez quelques options. p>
LinkedList Code> Mise en œuvre LI>
- attrape l'exception qui sera projetée actuellement, puis renvoyer la valeur que vous trouvez appropriée pour ce scénario li>
- Vérifiez la taille de la liste liée avant d'appeler
.Pek () code> et renvoyer la valeur appropriée au lieu d'appeler em> . / code> si La taille est 0. S'il ne s'agit pas de 0, allez-y et faites appel à l'appel. Li>
ol>
La mise en œuvre de la méthode Peak () pour Java.Util.LinkedList dit que "récupère, mais ne supprime pas, la tête (premier élément) de cette liste" P>
Alors avec java.util.LinkedList, ce n'est pas possible. P>
Vous avez peut-être importé LinkedList d'une autre bibliothèque autre que "Java.Util.LinkedList" P>
Si après avoir lu les réponses, nous modifions nos questions, nous ne devrions pas voter au moins ces réponses.
Pour le moment, la seule explantation est dans ce fil p>
"Une liaison linked n'est pas thread-coffre-fort" p>
problème de sécurité de thread p>
Je vais donc utiliser: LinkedBlockingQueue P>
Comment
MYLINKEDLIST CODE> a une valeur à
PEEK CODE> Quand sa taille est 0?
Parce qu'il n'y a rien dans la liste.
Est-ce une implémentation ou une liste lie pure?
La question n'est pas très claire: vous vous demandez pourquoi cela s'est produit (question de débogage), ou êtes-vous intéressé par une manière à faire cela qui se produit (question plus théorique)?
c'est une question de débogage
Veuillez éditer votre question et vous montrer un exemple de reproductible minimal qui démontre une liste lié à vide dont
peek code > La méthode renvoie une valeur non nulle.
Avez-vous une implémentation spéciale de
linkedlist code> ou pouvez-vous vous assurer que, au point, où l'objet est créé, c'est vraiment un
java.util.linkedlist code> instancié ? Je sais qu'il existe par exemple des implémentations code> mappe code> qui ne renvoient qu'une valeur d'estimation, lors de l'appelant
Taille () Code>.
Pouvez-vous s'il vous plaît afficher
system.out.println ("Classe:" + myLinkedList.getclass (). GetName ()); code>?
Permettez-moi d'expliquer: ce code concerne une commande CNC et Stream (LinkedList) à la CNC. C'est un bug non reproductible: cela se produit un peu de temps. Je pense que cela vient du bruit de la communication série / USB. Peu importe. Pour corriger ce bogue par ajustement du logiciel, j'ai trouvé cette chose géniale: quand bug =: peek () renvoie une valeur de chaîne (commande) mais la taille est 0 (liste de commandes). Donc, il jette un nullpointer. Je peux le corriger, mais je veux comprendre pourquoi. Juste pourquoi et comment un coup d'œil () peut retourner une valeur et en même temps la taille de la liste () renvoyant 0. Son non-Sens. J'ajouterai le getclass.getname à mon prochain essai.
myLinkedList.getclass (). GetName () => Java.Util.LinkedList
@LeDahu Veuillez ajouter le "Ce code est pour une explication CNC et ..." à la question, il fournit un contexte. Exécutez-vous le code dans certains JVM / ordinateur spécial pour cette machine CNC, ou utilisez-vous sur une JVM régulière (comme l'oracle One)?
Le bug apparaît à nouveau aujourd'hui ... c'est fou. J'ai édité avec plus de code. S'il vous plaît aider. Sa course jvm 1.8.0_231, oracle