Null Pointer Exception

1

Null Pointer Exception

offline
  • Pridružio: 26 Avg 2010
  • Poruke: 10621
  • 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: 10621
  • 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: 16459

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: 10621
  • 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: 10621
  • 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 773 korisnika na forumu :: 46 registrovanih, 5 sakrivenih i 722 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: A.R.Chafee.Jr., babaroga, bato, baza, calvi, Ctrl x, dankisha, djordje92sm, djukapfc, dragon986, dule10savic, Georgius, goxin, HrcAk47, Kibice, kreza, kunktator, kybonacci, ljuba.b, Lucije Kvint, madza, MarKhan, Marko Marković, Markoni29, MB120mm, Megapurpletv, mercedesamg, Miskohd, ofbeyond, Outis, proka89, ScreenSaver, Singidunumac, Smiljke, spektorsky, ssekir75, stegonosa, time, Toni, USSVoyager, VJ, vlvl, Warhawk, xJeremijAx, yrraf, Živković