2014-01-10 1 views
1

Мой проект для класса программирования - это создание программы (с использованием NetBeans), где пользователи могут вводить информацию о фильме и хранить ее. Они могут искать список фильмов для информации, то есть название, актер, качество и т. Д. У меня есть java-файл, который позволяет пользователям вводить информацию о фильме в текстовые поля и сохраняет его в txt-файле.Поиск текстового файла и возвращаемого массива в Java

Проблема, с которой я столкнулась, заключается в том, что каждый раз, когда пользователь выполняет поиск фильма, он возвращает исключение с нулевым указателем.

Вот часть моего кода для поиска:

private void sbtnActionPerformed(java.awt.event.ActionEvent evt) {          
    try{ 
     if(!mField.getText().equals("Search Movie Title")){ 
      if(sameTitle(mField.getText())!=null){ 
       display_Search_Info.main(info); 
       dispose(); 
      }else{ 
       JOptionPane.showMessageDialog(null, "No Movie Info Found.", "Error", JOptionPane.WARNING_MESSAGE); 
      } 
     } 
     if(!aField.getText().equals("Search Actor Name")){ 
      if(sameActor(aField.getText())!=null){ 
       display_Search_Info.main(info); 
       dispose(); 
      }else{ 
       JOptionPane.showMessageDialog(null, "No Movie Info Found.", "Error", JOptionPane.WARNING_MESSAGE); 
      } 
     } 
     if(!gBox.getSelectedItem().equals("Select Genre")){ 
      if(sameGenre(String.valueOf(gBox.getSelectedItem()))!=null){ 
       display_Search_Info.main(info); 
       dispose(); 
      }else{ 
       JOptionPane.showMessageDialog(null, "No Movie Info Found.", "Error", JOptionPane.WARNING_MESSAGE); 
      } 
     } 
     if(!lBox.getSelectedItem().equals("Select Location")){ 
      if(sameLocation(String.valueOf(lBox.getSelectedItem()))!=null){ 
       display_Search_Info.main(info); 
       dispose(); 
      }else{ 
       JOptionPane.showMessageDialog(null, "No Movie Info Found.", "Error", JOptionPane.WARNING_MESSAGE); 
      } 
     } 
     if(mField.getText().equals("Search Movie Title")&&aField.getText().equals("Search Actor Name")&&gBox.getSelectedItem().equals("Select Genre")&&lBox.getSelectedItem().equals("Select Location")){ 
      JOptionPane.showMessageDialog(null, "Please Enter Information About The Movie", "Error", JOptionPane.WARNING_MESSAGE);     
     } 
    }catch(IOException e){ 
     System.out.println("Error Occured"); 
    }  
}          
public String[] sameTitle(String s) throws IOException{ 
    BufferedReader br=new BufferedReader(new FileReader("M:/NetBeans Projects/MovieList/src/MovieInfo.txt")); 
    String line; 
    info= new String[6]; 
    do{ 
     for(int i=0; i<6; i++){ 
      info[i]=br.readLine(); 
     } 
    }while((line=br.readLine())!=null); 

    if(info[0].contains(s)){ 
     return info; 
    }else{ 
     return null; 
    } 

} 
public String[] sameActor(String s) throws IOException{ 
    BufferedReader br=new BufferedReader(new FileReader("M:/NetBeans Projects/MovieList/src/MovieInfo.txt")); 
    String line=""; 
    info= new String[6]; 
    while((line=br.readLine())!=null&&!info[1].contains(s)||!info[2].contains(s)){ 
     for(int i=0; i<6; i++){ 
      info[i]=br.readLine(); 
     } 
    } 
    if(info[1].contains(s)||info[2].contains(s)){ 
     return info; 
    }else{ 
     return null; 
    } 
} 
public String[] sameGenre (String s) throws IOException{ 
    BufferedReader br=new BufferedReader(new FileReader("M:/NetBeans Projects/MovieList/src/MovieInfo.txt")); 
    String line=""; 
    info= new String[6]; 
    while((line=br.readLine())!=null&&!info[3].contains(s)){ 
     for(int i=0; i<6; i++){ 
      info[i]=br.readLine(); 
     } 
    } 
    if(info[3].contains(s)){ 
     return info; 
    }else{ 
     return null; 
    } 
} 
public String[] sameLocation (String s) throws IOException{ 
    BufferedReader br=new BufferedReader(new FileReader("M:/NetBeans Projects/MovieList/src/MovieInfo.txt")); 
    String line=""; 
    info= new String[6]; 
    while((line=br.readLine())!=null&&!info[4].contains(s)){ 
     for(int i=0; i<6; i++){ 
      info[i]=br.readLine(); 
     } 
    } 
    if(info[4].contains(s)){ 
     return info; 
    }else{ 
     return null; 
    } 
} 

JOptionPane не работает и не отправляет его на следующий файл просто получать «Исключение в потоке» АВТ-EventQueue-0 "java.lang.NullPointerException".

+1

Включите трассировку стека исключений. –

+1

Без stacktrace, это невозможно сказать, но вот несколько общих советов: Если вы сравниваете hardcoded-string с переменной строкой, сначала установите hardcoded, IE: '' Search Movie Title '.equals (mField. getText()) 'Другой способ может вызвать NPE, если переменная/поле не инициализировано должным образом. – turbo

+0

Я сделал это по-другому, потому что NetBeans всегда говорит, что логичнее делать это как текстовое поле. – user3177878

ответ

0

Все ваши методы, похоже, имеют «ту же» структуру, я предлагаю вам использовать Список для хранения соответствующих строк (линий). То есть, я думаю, вам стоит попробовать что-то еще, например:

public String[] sameLocation(String s) throws IOException { 
    BufferedReader br = new BufferedReader(new FileReader(
      "M:/NetBeans Projects/MovieList/src/MovieInfo.txt")); 
    String line = ""; 
    List<String> al = new ArrayList<String>(); 
    if (s != null) { 
     while ((line = br.readLine()) != null) { 
      for (int i = 0; i < 6; i++) { // <-- Why 6? 
       al.add(line); 
      } 
     } 
    } 
    if (al.size() > 0) { 
     String [] out = new String[al.size()]; 
     return al.toArray(out); 
    } else { 
     return null; 
    } 
} 
+0

Хорошо, все работает сейчас. Большое спасибо! Действительно ценю это. – user3177878

+0

@ user3177878 Если он работает, пожалуйста, [принимайте] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) ответ. –

+0

ok, извините, что я новичок на этом сайте – user3177878