2016-09-09 1 views
-1

j'ai un fichier qui se compose comme celui-ciException dans le thread "principal" java.util.NoSuchElementException

/1/a/a/a/Female/Single/a/a/January/1/1920/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a 

et voici mon code StringTokenizer:

public void retrieveRecords(){ 
     String holdStr=""; 
     try { 
      fileRead=new FileReader(fileNew); 
      read=new Scanner(fileRead); 

      while(read.hasNext()){ 
       holdStr+=read.nextLine()+"\n"; 
      } 
      read.close(); 

      StringTokenizer strToken=new StringTokenizer(holdStr, "/"); 

      while(strToken.hasMoreElements()){ 
       rows=new Vector(); 
       for(int i=0; i<column.length; i++){ 
        rows.add(strToken.nextElement()); 
       } 
       ViewTablePanel.tblModel.addRow(rows); 
      } 

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

fait, je ne dispose pas idée quel est le problème aussi bien que j'ai recherché toutes les raisons pour lesquelles nosuchelementexception serait arrivé, mais je ne fais pas toutes ces raisons pour lesquelles cela ne fonctionnera pas. Toute suggestion serait ouverte merci beaucoup :)

+0

Dans quelle ligne l'exception se produit-elle? En outre, lisez s'il vous plaît à propos de la publication d'un [Exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve). – Jezor

+5

votre boucle while appelle 'hasMoreElements()' mais à l'intérieur de celle-ci vous avez une boucle for qui appelle 'nextElement()' plusieurs fois. Par le javadoc, 'nextElement()' peut lancer NoSuchElementException s'il n'y a plus d'éléments. – FatalError

+0

Veuillez lire [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve). Par exemple, vous pouvez directement créer un tokenizer à partir de la chaîne dans votre extrait de code au lieu de lire un fichier. Cela rend la reproduction beaucoup plus facile. Qu'est-ce que 'ViewTablePanel', est-ce important de reproduire le problème? –

Répondre

1
NoSuchElementException read.hasNextLine()

Exception java.util.NoSuchElementException Cette exception est levée pour indiquer qu'il n'y a plus d'éléments dans un tokenizer.

while(strToken.hasMoreElements()){ 
     rows=new Vector(); 
     for(int i=0; i<column.length; i++){ 
      rows.add(strToken.nextElement()); //Exception will throw on this line 
     } 
     ViewTablePanel.tblModel.addRow(rows); 
    } 

Dans votre boucle while vous avez condition pour vérifier plusieurs éléments à l'aide hasMoreElements(). Mais à l'intérieur de la boucle, vous avez pour boucle qui appelle nextElement() plusieurs fois. S'il n'y a aucun élément dans tokenizer alors nextElement() lancera java.util.NoSuchElementException.

Solution: Ajout d'une condition dans la boucle pour la vérification des éléments dans le tokenizer.

1
while(read.hasNext()){ 

      holdStr+=read.nextLine()+"\n"; 
    } 

De ce qui précède, lecture du scanner n'a pas de tokenizer, par conséquent, read.hasNext() throws devrait fonctionner correctement