2016-04-09 18 views
0
java.lang.NullPointerException 
    at videostore.BinaryFile.adderoo(BinaryFile.java:47) 
    at videostore.VideoStore.jButton1ActionPerformed(VideoStore.java:384) 
    at videostore.VideoStore.access$100(VideoStore.java:17) 
    at videostore.VideoStore$2.actionPerformed(VideoStore.java:189) 

ライン47:if (videosList == null || videosList.size() == 0)ArrayListに関してNullPointerExceptionが発生しましたか?

ライン384:BinaryFile.adderoo(vid);次のような方法を指し

public void adderoo(Video v) { 
     if (videosList == null || videosList.size() == 0) { 
      videosList = new ArrayList<>(10); 
     } 
     videosList.add(v); 
    } 

行17:public class VideoStore extends javax.swing.JFrame {

ライン189:jButton1ActionPerformed(evt);

本質的に私は作成したArraylistにVideoオブジェクトを追加しようとしていますvideosList。しかし、私がしようとするたびに、私はその例外を取得し、私は私のBinaryFileクラスでのArrayListを初期サイズでのArrayList ..

初期化されているので、なぜ私はわからない。そして、public static ArrayList<Video> videosList;

を私が方法を持っています私はそれのコンストラクタで私の主なvideoStoreクラスで実行負荷、命名:

public void load() throws Exception { 

     BufferedReader br = new BufferedReader(new FileReader(FILE_NAME)); 
     if (br.readLine() != null) { 
      try { 
       File log = new File(FILE_NAME); 
       FileInputStream fileIn = new FileInputStream(log); 
       ObjectInputStream in = new ObjectInputStream(fileIn); 
       ArrayList<Video> videosList = (ArrayList)in.readObject(); 
       in.close(); 
       fileIn.close(); 
      } catch (Exception i) { 
       i.printStackTrace(); 
      } 
     } else { 
      ArrayList<Video> videosList = new ArrayList<>(10); 
     } 
     br.close(); 
    } 

この方法の意図は、ファイルがすでにArrayListのが含まれているかどうかを確認することであり、それはそれが含まれている場合、それはデそれを直列化するArrayListに配置します。

私はすべてのストップをカバーしたように感じるので、なぜ例外が発生しているのか分かりません。 videosListがnullの場合

+1

@KevinEsche感謝:ここ

!(videosList != null && videosList.size() > 0)

は、コードスニペットです!それはそれを直して固定した。私はそれを感謝します:)答えとしてポスト私はあなたに緑色のチェックの事を与えることができますか? –

+2

videoListが 'null'の場合、遅延条件の評価により、if条件の2番目の部分を評価すべきではありません。より安全で安全なチェックをしてみてください。例えば、あなたが 'videosValues!= null && videosList.size()> 0' – FredMaggiowski

答えて

1

あなたifShort-Circuit Evaluationのおかげで、それは私があなたのArrayListがnullの場合は、テストする安全な方法を使用することをお勧めvideosList.size() == 0

if (videosList == null || videosList.size() == 0) 

第二の条件をテストするべきではありません、最初の条件をテストしたり私は私のコメントで掲示1のように、方法.isEmpty()提供または条件と異なる場合、例えば、使用して空:

if (videosList != null && !videosList.isEmpty()) 

:コメントで私はvideosList.size > 0を使用しました。しかし、私たちは.isEmpty()を持っているので、それを使う方が良いです。

+0

なぜ条件を否定するのですか? –

+0

私はベストプラクティスとして条件を否定することで常に仕事をしてきました。そして、私には(意見があるかもしれませんが、それは私を助けてくれました。私はこのように教えてきました)実際にはコードベースを整理するのがより安全な方法です – FredMaggiowski

0

あなたが指定した条件に従って、videosList.size()の評価では、リスト自体がnullの場合、NullPointerExceptionを投げることができます。

あなたはこのような何かに条件を変更する必要があります。

public void adderoo(Video v) { 
    if (!(videosList != null && videosList.size() > 0)) { 
     videosList = new ArrayList<>(10); 
    } 
    videosList.add(v); 
} 
関連する問題