Null Pointer Exception

1

Null Pointer Exception

offline
  • Pridružio: 26 Avg 2010
  • Poruke: 10615
  • Gde živiš: Hypnos Control Room, Tokyo Metropolitan Government Building

Napisano: 15 Avg 2013 22:41

Već nekoliko sati lupam glavu i ne mogu da provalim gdje griješim. Stalno mi na liniji 19 (if (Autotrka.staza[id][pos] == Autotrka.stop) ) izbacuje Null pointer exception iako su te pozcije u nizu već popunjene Object-ima i Stopovima. Ako neko zna gdje griješim bio bih mu zahvalan kada bi mi pokazao gdje griješim.


import java.util.* ; class Autotrka {     public static Object staza [][] ;     public static boolean win = false ;     public static String stop = "STOP!" ;     public static Automobil a [] ;         public static void main (String args []) {         Object staza[][] = new Object[3][15] ;         for (int i = 0 ; i < 3 ; i++)             for (int j = 0 ; j < 15 ; j++)             staza[i][j] = new Object() ;         Automobil a[] = new Automobil[3] ;         for (int i = 0 ; i < 3 ; i++)            a[i] = new Automobil() ;         staza[0][0] = a[0] ;         staza[1][0] = a[1] ;         staza[2][0] = a[2] ;         int x = 0 ;         int y = 0 ;         Random rand = new Random() ;         for (int i=0 ; i < 4 ; i++) {             x = rand.nextInt(2) ; // zbog prirode metode nextInt(n)             y = rand.nextInt(14) ;             if (staza[x][y] != stop) staza[x][y] = stop ;             else i-- ; //vraća brojač u slučaju da je staza[x][y] == stop         }                 a[0].start() ;         a[1].start() ;         a[2].start() ;     } }

class Automobil extends Thread {     private String tip ;     private int id ;     static private int br = 0 ;         private int pos ;         Automobil () {         tip = "NekiTip" ;         id = br ;         br++ ;         pos = 0 ;     }         public void run() {         try {            for ( ; pos < 15 && !Autotrka.win ; pos++) {               System.out.println(pos + " " + id) ; //samo za provjeru               if (Autotrka.staza[id][pos] == Autotrka.stop) {                  System.out.println("Auto br " + id + " naišlo je na STOP na poziciji " + pos) ;                  sleep(5000) ;               }               else sleep(1000) ;               Autotrka.staza[id][pos+1] = Autotrka.a[id] ;               Autotrka.staza[id][pos] = new Object() ;            }            if (pos == 15 && !Autotrka.win) {               Autotrka.win = true ;               System.out.println("Pobijedio je auto br " + id) ;               interrupt() ;            }            if (pos < 15 && Autotrka.win) {               System.out.println("Autu br " + id + " je ostalo " + (15-pos) + " do kraja.") ;               interrupt() ;            }         }         catch (Exception e) {e.printStackTrace();}     } }

Dopuna: 15 Avg 2013 22:47

Napomena.
Ista situacija je i sa equals metodom.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Software developer
  • Pridružio: 06 Sep 2005
  • Poruke: 3800
  • Gde živiš: Beograd

A kad prodjes debug-om i stanes u tom redu na promenjive
Autotrka.staza[id][pos] i Autotrka.stop, vidi im vrednosti za staza[id][pos] i za stop?



offline
  • Pridružio: 26 Avg 2010
  • Poruke: 10615
  • Gde živiš: Hypnos Control Room, Tokyo Metropolitan Government Building

Napisano: 16 Avg 2013 10:37

Koristim Dr.Java (pravila predmeta) tako da će Eclipse (i debugger) morati da sačeka.
Shvatio sam da null pointer exception ne izbacuje kada pokušam da pristupim objektima u matičnoj klasi. Iako je staza deklarisana kao public i static ne radi kako treba. Pokušaću sa raspoređivanjem u pakete.

Dopuna: 16 Avg 2013 11:33

Ni raspoređivanje po paketima ne pomaže. Čak i za "if (Autotrka.staza[id][pos] == null)" izbacuje null pointer exception. Ne znam više koji mu je. GUZ - Glavom U Zid

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Umesto reda u kojem imaš:
Object staza[][] = new Object[3][15] ;
napiši samo:
staza = new Object[3][15] ;

Na taj način ćeš inicijalizirati statičku promenljivu staza, umesto da napraviš lokalnu sa istim imenom, dok statička ostaje neinicijalizovana.

offline
  • Osvjedodžbeni spretnik munjarstva
  • Pridružio: 04 Jul 2011
  • Poruke: 5424
  • Gde živiš: Beograd

Moraš da inicijalizuješ statičku varijablu, a ne da praviš lokalnu.
Object staza[][] = new Object[3][15] ;

Probaj sa:
Citat:staza = new Object[3][15] ;

offline
  • Fil  Male
  • Legendarni građanin
  • Pridružio: 11 Jun 2009
  • Poruke: 16361

Yup, i ja mislim da će ovo da ti reši problem, budući da si već deklarisao "stazu".

offline
  • Pridružio: 26 Avg 2010
  • Poruke: 10615
  • Gde živiš: Hypnos Control Room, Tokyo Metropolitan Government Building

Hvala, sada radi. Smile

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1627
  • Gde živiš: Pancevo

Sta ce tebi pokazivaci u Javi? Mani se toga ako bas volis da radis sa pointerima onda idi na C++...

offline
  • Pridružio: 26 Avg 2010
  • Poruke: 10615
  • Gde živiš: Hypnos Control Room, Tokyo Metropolitan Government Building

Napisano: 16 Avg 2013 18:06

_iKaC ::Sta ce tebi pokazivaci u Javi? Mani se toga ako bas volis da radis sa pointerima onda idi na C++...

Ne vidim pokazivače niti ih želim koristiti u Javi. Na koji dio koda konkretno misliš?

Dopuna: 16 Avg 2013 18:14

U javi su koliko m ije pozanto svi objekti dinamički i varijable, u ovom slučaju staza[][] i a[], su pointeri na neku memorijsku lokaciju u heap-u pa baš i ne razumijem tvoje pitanje zašto koristim pokazivače.

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1627
  • Gde živiš: Pancevo

Pointer = Pokazivac

Pre par godina sam citao neku knjigu bas namenjena za Java PRL. Detaljno je bilo opisano za pintere i lociranje u memoriji. Java izbegava korisncenje pokazivaca na datu lokaciju u memoriji a kamo li citanje. Ti si u pravu i ovaj tvoj multi array naravno da sadrzi neku lokacaju u momoriji. Ali kazem nisam video da iko naziva handler pointerom. Al eto nesto novo da cujem.

Ko je trenutno na forumu
 

Ukupno su 659 korisnika na forumu :: 23 registrovanih, 4 sakrivenih i 632 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: AC-DC, amaterSRB, Apok, aramis s, Belac91, CrazySerb_MLD, d bos, darkangel, deNSki, dr_grof, Drug pukovnik, goxin, Marko Marković, MB120mm, nikolapetkovic, ninareflex, pavle_pzs, piton, proka89, sakota79, Smiljke, zoxknez, 79693