2015-11-08 2 views
0

Может ли кто-нибудь сказать мне, почему в следующем коде существует исключение NullPointerException? Я попытался понять это, но не мог!Исключение Null Pointer

Исключение составляет в следующей строке:

companies[x].compName=temp1[0]; 

Тип компании массив Компания, которая содержит строку и список массива.

JFileChooser fileChooser = new JFileChooser();        // create instence from file chooser 
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home"))); //assign directory 

if(fileChooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){ 
    File f = fileChooser.getSelectedFile(); 
    try{ 

     LineNumberReader lnr = new LineNumberReader(new FileReader(f)); 
     lnr.skip(Long.MAX_VALUE); 
     int n = lnr.getLineNumber() +1; 

     lnr.close(); 
     companies = new Company[n]; 
     int i=0 , x=0; 
     String s =""; 
     Scanner input = new Scanner(f); 
     String [] temp1,temp2; 
     while(input.hasNext()){  // read line by line 

      s = input.nextLine(); 
      s=s.replaceAll(" ", ""); 
      if(s == null) 
      continue; 
      else{ 

       temp1 =s.split(","); 
       companies[x].compName=temp1[0];   //store compName in the companies 
       for(i=1;i<temp1.length;i++){ 


        temp2=temp1[i].split("/"); 
        companies[n].compItems.addLast(temp2[0], Integer.parseInt(temp2[1])); 

       } //end for 
      } //end else 
      x++; 
     } //end while 
+1

Не читал код , Но с первой строки есть три (включительно OR) возможности: (1) компании имеют значение null. (2) компании [x] имеют значение null. (3) temp1 имеет значение null. Итак, пройдите и убедитесь, что ни одна из этих трех вещей не может произойти, или что вы справляетесь с ней надлежащим образом, если и когда это произойдет. – Jameson

+0

Хорошо, я попробую проверить его снова. – Metanoia

ответ

1

Просмотреть комментарии - компания [x] не была выбрана компанией(). Недостаточно инициализировать массив - каждый элемент в нем также должен быть назначен.

Вы могли бы быть лучше использование списка, поскольку количество строк используются для инициализации массива не может быть количеством компаний на всех (некоторые строки пропускаются)

while(input.hasNext()){  // read line by line 

     s = input.nextLine(); 
     s=s.replaceAll(" ", ""); 
     if(s == null) 
     continue; 
     else{ 

      temp1 =s.split(","); 
      //companies[x] is still null - initialize this! 
      companies[x] = new Company(); 
      //Now this should be fine 
      companies[x].compName=temp1[0];   //store compName in the companies 
      for(i=1;i<temp1.length;i++){ 
+0

Это сработало, спасибо вам большое. – Metanoia

Смежные вопросы