0
votes

Erreur LinkedList LinkedList Peek () Non NULL ET TAILLE () = 0

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)

12 commentaires

Comment MYLINKEDLIST a une valeur à PEEK 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 La méthode renvoie une valeur non nulle.


Avez-vous une implémentation spéciale de linkedlist ou pouvez-vous vous assurer que, au point, où l'objet est créé, c'est vraiment un java.util.linkedlist instancié ? Je sais qu'il existe par exemple des implémentations mappe qui ne renvoient qu'une valeur d'estimation, lors de l'appelant Taille () .


Pouvez-vous s'il vous plaît afficher system.out.println ("Classe:" + myLinkedList.getclass (). GetName ()); ?


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


4 Réponses :


0
votes

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 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". XXX PRE>

Ceci imprime: P>

String: blablabla, Size: 0


1 commentaires

Ouais. Mais c'est une question de débogage. Peek () Renvoyer une valeur et une taille () est 0 ...



-1
votes

Si vous avez absolument besoin de retourner une valeur lorsque la taille est 0, vous avez quelques options.

  1. Créez votre propre LinkedList Mise en œuvre
  2. attrape l'exception qui sera projetée actuellement, puis renvoyer la valeur que vous trouvez appropriée pour ce scénario
  3. Vérifiez la taille de la liste liée avant d'appeler .Pek () et renvoyer la valeur appropriée au lieu d'appeler . / code> si La taille est 0. S'il ne s'agit pas de 0, allez-y et faites appel à l'appel.

0 commentaires

-1
votes

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"

Alors avec java.util.LinkedList, ce n'est pas possible.

Vous avez peut-être importé LinkedList d'une autre bibliothèque autre que "Java.Util.LinkedList"


1 commentaires

Si après avoir lu les réponses, nous modifions nos questions, nous ne devrions pas voter au moins ces réponses.



0
votes

Pour le moment, la seule explantation est dans ce fil

"Une liaison linked n'est pas thread-coffre-fort"

problème de sécurité de thread

Je vais donc utiliser: LinkedBlockingQueue


0 commentaires