UML / java błąd java.lang.NullPointerException

Witam pisze pod UML-em w Netbeansie tzn zaczynam “przygode” z UML-em , program “wypozyczalnie filmów”.

Po skompilowaniu kilku klas: Film.java, Tytul_filmu.java, Uchwyt.java pojawia sie problem ;-(

Odpalam program za pomoca Uchwyt.java tutaj kod:

import java.util.ArrayList; 



public class Uchwyt {



    private ArrayList mTytul_filmu = new ArrayList();



    public void dodaj_tytul (String a, String b, String c, String d, String e, String f)

    {

        Tytul_filmu tytul_filmu=new Tytul_filmu();

        tytul_filmu.setTytul(a);

        tytul_filmu.setRezyseria(b);

        tytul_filmu.setGatunek(c);

        tytul_filmu.setPremiera(d);

        tytul_filmu.setObsada(e);

        tytul_filmu.setCzas_trwania(f);

        addTytul_filmu(tytul_filmu);

    }

//////////////////////////////////////////////////////////////

    public ArrayList getTytul_filmu () {

        return mTytul_filmu;

    }


    public void setTytul_filmu (ArrayList val) {

        this.mTytul_filmu = val;

    }


    public void addTytul_filmu (Tytul_filmu tytul_filmu)

    {if(! mTytul_filmu.contains(tytul_filmu))

    mTytul_filmu.add(tytul_filmu);}


    public void Dodaj_film(String Gatunek_, int numer_)

    {

    Tytul_filmu pom=new Tytul_filmu();

    pom.setGatunek(Gatunek_);

    int idx=mTytul_filmu.indexOf(pom);

    if (idx!=-1)

    {Tytul_filmu pom1=mTytul_filmu.get(idx);

     pom1.dodaj_film(numer_);

     System.out.println(pom1.getFilm().toString());


    }


//////////////////////////////////////////////////////////

    }

    public static void main(String t[])

    {

        Uchwyt ap=new Uchwyt();

        ap.dodaj_tytul("1","1","1","1","1","1");

        ap.dodaj_tytul("2","2","2","2","2","2");

        ap.dodaj_tytul("2","2","2","2","2","2");

        String lan=ap.getTytul_filmu().toString();

        System.out.println(lan);


    ap.Dodaj_film("1",1);

    ap.Dodaj_film("1",2);

    ap.Dodaj_film("1",2);

    ap.Dodaj_film("2",1);

    }


    }

tutaj : Film.java

public class Film {


    private int numer;


    private Tytul_filmu mTytul_filmu;


    public int getNumer ()

    { return numer; }


    public void setNumer (int _numer) {

        numer = _numer;

    }


  public Film ()

    {}


    public boolean equals (Object ob) {

        return numer==((Film)ob).getNumer();

        }


public Tytul_filmu getTytul_filmu ()

{ return mTytul_filmu; }


 public void setTytul_filmu(Tytul_filmu val)

 { mTytul_filmu=val; }


 public String toString()

 {String pom= mTytul_filmu.toString();

  pom+="Numer: "+getNumer();

  return pom;

 }

}

Tytul_filmu:

import java.util.ArrayList;




public class Tytul_filmu {



    private String Rezyseria;

    private String Gatunek;

    private String Premiera;

    private String Obsada;

    private String Czas_trwania;

    private String Tytul;

    private ArrayList mFilm;



    public Tytul_filmu () {

    }


    public String getCzas_trwania () {

        return Czas_trwania;

    }


    public void setCzas_trwania (String f) {

        Czas_trwania = f;

    }


    public String getGatunek () {

        return Gatunek;

    }


    public void setGatunek (String c) {

       Gatunek = c;

    }



    public String getObsada () {

        return Obsada;

    }


    public void setObsada (String e) {

        Obsada = e;

    }


    public String getPremiera () {

        return Premiera;

    }


    public void setPremiera (String d) {

        Premiera = d;

    }


    public String getRezyseria () {

        return Rezyseria;

    }


    public void setRezyseria (String b) {

       Rezyseria = b;

    }


    public String getTytul () {

        return Tytul;

    }


    public void setTytul (String a) {

        Tytul = a;

    }

/////////////////////////////////////

  public boolean equals(Object ob)

    {boolean a;

     a=Gatunek.equals(((Tytul_filmu)ob).getGatunek());

     System.out.println(a);

     return a;


    }



  //////////////////////////////////


    public String toString () {

        String pom="Tytul: "+getTytul();

        pom+="Rezyser: "+getRezyseria();

        pom+="Gatunek: "+getGatunek();

        pom+="Premiera: "+getPremiera();

        pom+="Obsada: "+getObsada();

        pom+="Czas_trwania: "+getCzas_trwania();

        return pom;

    }

    ////////////////////////////////


    public void dodaj_film(int numer_)


    { Film nowa=new Film();

      if(nowa != null)

      {nowa.setNumer(numer_);

       addFilm(nowa);}

      }


    public void addFilm(Film nowa)

    { if(!this.mFilm.contains(nowa))

    { this.mFilm.add(nowa);

      nowa.setTytul_filmu(this); }

}


public ArrayList getFilm()

{return mFilm; }

public void setFilm(ArrayList val)

{this.mFilm = val;}

}

No i po kompilacji i uruchomieniu Uchwyt.java wyswietla mi sie nastepujacy komunikat:

Exception in thread "main" java.lang.NullPointerException

        at Tytul_filmu.addFilm(Tytul_filmu.java:101)

        at Tytul_filmu.dodaj_film(Tytul_filmu.java:97)

        at Uchwyt.Dodaj_film(Uchwyt.java:41)

        at Uchwyt.main(Uchwyt.java:57)

Java Result: 1

tutaj caly debug:

debug:

false

false

true

[Tytul]

true

Exception in thread "main" java.lang.NullPointerException

        at Tytul_filmu.addFilm(Tytul_filmu.java:101)

        at Tytul_filmu.dodaj_film(Tytul_filmu.java:97)

        at Uchwyt.Dodaj_film(Uchwyt.java:41)

        at Uchwyt.main(Uchwyt.java:57)

Java Result: 1

BUILD SUCCESSFUL (total time: 2 seconds)

Prosze o pomoc bardziej doswiadczonych Uzytkowników .

Witam,

Zapomniałeś zainicjować listę w klasie tytul_filmu, a dokładnie:

private ArrayList mFilm;

Albo brakuje Ci mFilm = new ArrayList(); albo przekazania tutaj listy z wyższego poziomu (chyba tego właśnie zapomniałeś zrobić skoro masz settera).

Pozdrawiam.

Dzieki za zainteresowanie juz wprowadzam modyfikacje :wink:

ps. private ArrayList mFilm; mam zainicjowane w tytul_filmu

a gdzie mialbym mFilm = new ArrayList(); dopisac ?

private ArrayList mFilm;

to dopiero sama deklaracja nazwy i typu zmiennej, java domyślnie wstawia tam null. jeśli napiszesz tam:

private ArrayList mFilm = new ArrayList();

albo w klasie korzystającej z Tytul_filmu, przed zrobieniem czegokolwiek co pracuje z mFilm wywołasz metodę:

public void setFilm(ArrayList val) {

		this.mFilm = val;

	}

w której przekażesz obiekt, a dokładniej ArrayListe to będzie działać.