修复Java中的空指针异常(使用ArrayList)

时间:2010-10-31 15:59:25

标签: java arraylist nullpointerexception

  

可能重复:
  Java null pointer exceptions - don't understand why…

MOVIE.JAVA

package javaPractical.week3;

import javax.swing.*;

public class Movie {
// private attributes
private String title;
private String movieURL;
private String year;
private String genre;
private String actor;

// constructor
Movie(String t, String u, String y, String g, String a) {
    this.title = t;
    this.movieURL = u;
    this.year = y;
    this.genre = g;
    this.actor = a;

}

// getters and setters
public void setTitle(String t) {
    this.title = t;
}

public String getTitle() {
    return this.title;
}

public void set_url(String a) {
    this.movieURL = a;
}

public String get_url() {
    return this.movieURL;
}

public void setYear(String y) {
    this.year = y;
}

public String getYear() {
    return this.year;
}

public void setGenre(String g) {
    this.genre = g;
}

public String getGenre() {
    return this.genre;
}

public void setActor(String a) {
    this.actor = a;
}

public String getActor() {
    return this.actor;
}

// output movie details
public String toString() {
    return ("Title: " + this.title + "\nURL: " + this.movieURL + "\nYear: "
            + this.year + "\nGenre: " + this.genre + "\nActor: " + this.actor);
}

public static void main(String[] args) {
    // testing Movie class
    Movie Movie1 = new Movie("Spiderman", "www.", "2002", "Action",
            "Tobey M");

    JOptionPane.showMessageDialog(null, Movie1.toString());
    // testing MovieList class

}
}

MOVIELIST.JAVA

package javaPractical.week3;

import javax.swing.*;
import java.util.ArrayList;

public class MovieList1 {

private static ArrayList<Movie> myFavouriteMovies = new ArrayList();
private static int NUM_OF_MOVIES = 10;
private int numberOfMovies = 0;
private int index = 0;

public MovieList1() {
    this.myFavouriteMovies = null;
    this.numberOfMovies = 0;
    this.index = 0;
}

public int getNumberOfMovies() {
    return this.myFavouriteMovies.size();
}

public boolean isEmpty() {
    if (this.myFavouriteMovies.isEmpty()) {
        return true;

    } else
        return false;

}

public static void main(String[] args) {
    MovieList1 List = new MovieList1();
    String titleADD;
    String movieURLADD;
    String yearADD;
    String genreADD;
    String actorADD;

    titleADD = JOptionPane.showInputDialog(null, "Enter title:");
    movieURLADD = JOptionPane.showInputDialog(null, "Enter URL:");
    yearADD = JOptionPane.showInputDialog(null, "Enter year:");
    genreADD = JOptionPane.showInputDialog(null, "Enter genre:");
    actorADD = JOptionPane.showInputDialog(null, "Enter actor:");

    Movie TempMovie = new Movie(titleADD, movieURLADD, yearADD, genreADD,
            actorADD);

    // crashes here
    myFavouriteMovies.add(TempMovie);

}
}

2 个答案:

答案 0 :(得分:2)

您已定义静态属性private static ArrayList<Movie> myFavouriteMovies = new ArrayList();

但是在构造函数中,您正在分配null。之后,您正在调用myFavouriteMovies.size()之类的调用,这会导致NullPointerException

public MovieList1() {
    this.myFavouriteMovies = null;
    this.numberOfMovies = 0;
    this.index = 0;
}

答案 1 :(得分:1)

当然它崩溃了 - 你把它设置为null。

为什么你没有注意到你在这里得到的非常好的建议?

Java null pointer exceptions - don't understand why

你在浪费每个人的时间来处理一个微不足道的问题。我投票结束了。

试试这个 - 它仍然令人发指,但它运行:

    package javaPractical.week3;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List;

public class MovieList1
{

    private static int NUM_OF_MOVIES = 10;

    private List<Movie> myFavouriteMovies;
    private int numberOfMovies = 0;
    private int index = 0;

    public MovieList1()
    {
        this.myFavouriteMovies = new ArrayList<Movie>();
        this.numberOfMovies = 0;
        this.index = 0;
    }

    public int getNumberOfMovies()
    {
        return this.myFavouriteMovies.size();
    }

    public boolean isEmpty()
    {
        return this.myFavouriteMovies.isEmpty();
    }

    public void add(Movie movie)
    {
        this.myFavouriteMovies.add(movie);
    }

    @Override
    public String toString()
    {
        return "MovieList1{" +
               "myFavouriteMovies=" + myFavouriteMovies +
               '}';
    }

    public static void main(String[] args)
    {
        MovieList1 movieList = new MovieList1();
        String titleADD;
        String movieURLADD;
        String yearADD;
        String genreADD;
        String actorADD;

        titleADD = JOptionPane.showInputDialog(null, "Enter title:");
        movieURLADD = JOptionPane.showInputDialog(null, "Enter URL:");
        yearADD = JOptionPane.showInputDialog(null, "Enter year:");
        genreADD = JOptionPane.showInputDialog(null, "Enter genre:");
        actorADD = JOptionPane.showInputDialog(null, "Enter actor:");

        Movie TempMovie = new Movie(titleADD, movieURLADD, yearADD, genreADD,
                                    actorADD);

        // crashes here
        movieList.add(TempMovie);
        System.out.println(movieList);

    }
}

class Movie
{
    private String title;
    private String url;
    private String year;
    private String genre;
    private String actor;

    Movie(String title, String url, String year, String genre, String actor)
    {
        this.title = title;
        this.url = url;
        this.year = year;
        this.genre = genre;
        this.actor = actor;
    }

    @Override
    public String toString()
    {
        return "Movie{" +
               "title='" + title + '\'' +
               ", url='" + url + '\'' +
               ", year='" + year + '\'' +
               ", genre='" + genre + '\'' +
               ", actor='" + actor + '\'' +
               '}';
    }
}