• 12 odgovora
  • 4.849 pregleda
NullPointerException 08.10.2006. u 16:44 · pre 244 meseci #1
Jel može neko da mi pojasni šta znači tačno ovaj izuzetak(NullPointerException)?
To mi izbacuje kad sam pokušala sa nekim kodom da ubacim tip podataka blob u moju tabelu u bazi...
Nisam sigurna gde grešim
Re: NullPointerException 08.10.2006. u 16:56 · pre 244 meseci #2
Taj exception se generiše kada probaš da pozoveš neki metod na referenci koja je null. Evo primjer:

java.lang.String objekti imaju metod length() koji vraća dužinu Stringa. Normalno radiš ovako:

Code:

String s = new String("test");
System.out.println(s.length());


ali ako uradiš ovako:

Code:

String s = null;
System.out.println(s.length());


generisaće se NullPointerException jer referenca s pokazuje na null.
Re: NullPointerException 08.10.2006. u 17:18 · pre 244 meseci #3
Da se nadovezem: javlja se kad pokusavas da radis sa objektom koji je samo deklarisan a ne i inicijalizovan.
To je run-time exception koji ne mora da se hendluje, ali moze.
U narodu je poznat kao: ZVEKETE EKSEPŠN.
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: NullPointerException 08.10.2006. u 17:47 · pre 244 meseci #4
ok,hvala sad mi je donekle jasno,ali pošto nisam ja pisala kod već sam ga samo modifikovala,staviću ga ovde pa ako neko može da mi pomogne kako da to izmenim bila bih mu zahvalna...

public class TestBLOBGetBinaryOutputStream {
Connection conn;
public TestBLOBGetBinaryOutputStream( ) {
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver(
));
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","SYSTEM","jeja");

}
catch (SQLException e) {
System.err.println(e.getMessage( ));
e.printStackTrace( );
}
}
public static void main(String[] args)
throws Exception, IOException {
new TestBLOBGetBinaryOutputStream().process( );
}
public void process( ) throws IOException, SQLException {

FileInputStream fin;
OutputStream out;
ResultSet rslt;
Statement stmt = null;
BLOB slika; // NOTE: oracle.sql.BLOB!!!

try {
conn.setAutoCommit(false);

stmt.executeUpdate(
"insert into Slike " +
"( id_slike, slika, komentar,id_mesta,id_smeštaja ) " +
"values " +
"( 1,empty_blob(),'no comment',1,1 ");

// Retrieve the locator

rslt = stmt.executeQuery("SELECT slika FROM Slike WHERE id_slike=1 FOR UPDATE NOWAIT");

rslt.next( );
slika = ((OracleResultSet)rslt).getBLOB(1);

// Now that we have the locator,
// lets store the photo
File binaryFile = new File("D:\\jeja\\diplomski\\slike\\slika1.jpg");
fin = new FileInputStream(binaryFile);
out = slika.getBinaryOutputStream( );
// Get the optimal buffer size from the BLOB
byte[] buffer = new byte[slika.getBufferSize( )];
int length = 0;
while ((length = fin.read(buffer)) != -1) {
out.write(buffer, 0, length);
}
out.close( );
out = null;
fin.close( );
fin = null;
conn.commit( );

}
catch (SQLException e) {
System.err.println("SQL Error: " + e.getMessage( ));
}
catch (IOException e) {
System.err.println("IO Error: " + e.getMessage( ));
}

catch (NullPointerException e){
System.err.println("NullPointer Error:" + e.getMessage());
}

}
protected void finalize( )
throws Throwable {
if (conn != null)
try { conn.close( ); } catch (SQLException ignore) { }
super.finalize( );
}
}

Re: NullPointerException 08.10.2006. u 21:55 · pre 244 meseci #5
Citat:
Java Beograd: Da se nadovezem: javlja se kad pokusavas da radis sa objektom koji je samo deklarisan a ne i inicijalizovan.
To je run-time exception koji ne mora da se hendluje, ali moze.
U narodu je poznat kao: ZVEKETE EKSEPŠN.


Ne bih baš da cjepidlačim ali ovo sa deklarisanjem i inicijalizacijom i nije baš tačno :)

Objekat može da bude inicijalizovan i na null što znači da NullPointerException može da bude generisan i prilikom rada sa inicijalizovanim objektom.
Re: NullPointerException 09.10.2006. u 07:56 · pre 243 meseci #6
Citat:
antix: Objekat može da bude inicijalizovan i na null ...


Ne govorim ni da je ovo tacno ni da nije, vec samo zelim da pitam:
Da li je objekat inicijalizovan ovako? Nije pozvan nijedan od konstruktora (ni default) pa mi se cini da objekat nije
inicijalizovan vec je samo referenci dodeljena vrednost null.
Da li sam u pravu, ako ne zasto?

Pozdrav!

Potpis
Sad mu nije nista, ubio si ga k'o zeca...
Re: NullPointerException 09.10.2006. u 10:41 · pre 243 meseci #7
Citat:
Toxter: Ne govorim ni da je ovo tacno ni da nije, vec samo zelim da pitam:
Da li je objekat inicijalizovan ovako? Nije pozvan nijedan od konstruktora (ni default) pa mi se cini da objekat nije
inicijalizovan vec je samo referenci dodeljena vrednost null.
Da li sam u pravu, ako ne zasto?

Pozdrav!


Da, u pravu si...lapsus... objekat nije inicijalizovan bez da su pozvani konstruktori itd. Zapravo, ono na šta sam mislio jeste: referenca na objekat može da bude inicijalizovana i na null, a NullPointerException se generiše baš tada.. kada je referenca null, a ti probaš da radiš sa njom kao da nije null.
Re: NullPointerException 09.10.2006. u 14:51 · pre 243 meseci #8
Čim deklarišeš objekat, on ima referencu na null. Tako, što se pomenutog Exception-a tiče potpuno je isto:

Object o;

i

Object o = null;
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: NullPointerException 10.10.2006. u 00:03 · pre 243 meseci #9
Citat:
ziris:
...
FileInputStream fin;
OutputStream out;
ResultSet rslt;
Statement stmt = null;
BLOB slika; // NOTE: oracle.sql.BLOB!!!

try {
conn.setAutoCommit(false);

stmt.executeUpdate(
"insert into Slike " +
"( id_slike, slika, komentar,id_mesta,id_smeštaja ) " +
"values " +
"( 1,empty_blob(),'no comment',1,1 ");
...


stmt ti ima vrednost null. dodaj stmt = conn.createStatement();
Re: NullPointerException 10.10.2006. u 16:23 · pre 243 meseci #10
Dodala sam,thanks.. mada mi sad izbacuje drugu grešku SQL Error: ORA-00917: missing comma, ali to već nema veze sa javom, pa ću potražiti pomoć na drugom mestu...
Re: NullPointerException 10.10.2006. u 23:18 · pre 243 meseci #11
Citat:
Java Beograd: Čim deklarišeš objekat, on ima referencu na null. Tako, što se pomenutog Exception-a tiče potpuno je isto:

Object o;

i

Object o = null;


Da iscepidlačimo do kraja. U primeru o nije objekat. To je samo promenjiva čiji je tip "referenca na (objekat tipa) Object". U čitavoj liniji nema ni jednog objekta! null je samo posebna vrednost koja se može dodeliti promenjivim koje su tipa reference na nešto, a koja znači da promenjiva ne referencira objekat.

A u javi su objekti UVEK inicijalizovani. Čak i ako se u definiciji klase ne napiše konstruktor postoji default, a i pre izvršenja konstruktora JVM pri alociranju memorije taj prostor popuni nulama koje se ovistno od tipa atributa tumače kao 0, 0.0f, 0.0d, 0L, false, null...
Potpis
Bolje džaba ležat nego džaba radit.
Re: NullPointerException 11.10.2006. u 07:36 · pre 243 meseci #12
Slažem se da su objekti uvek inicijalizovani, jer ako nisu, onda i ne postoje. Jer momenat inicijalizacije je momenat njihovog kreiranja.

Medjutim i u primeru :

Object o = new Object();

'o' nije objekat vec (citiram) To je samo promenjiva čiji je tip "referenca na (objekat tipa) Object".

Gde nam onda nestadoše objekti ?
Potpis
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
Re: NullPointerException 11.10.2006. u 09:31 · pre 243 meseci #13
Citat:
Java Beograd: Slažem se da su objekti uvek inicijalizovani, jer ako nisu, onda i ne postoje. Jer momenat inicijalizacije je momenat njihovog kreiranja.

Medjutim i u primeru :

Object o = new Object();

'o' nije objekat vec (citiram) To je samo promenjiva čiji je tip "referenca na (objekat tipa) Object".

Gde nam onda nestadoše objekti ?


Objekti su na heap-u, a sve reference su na stacku. A ti u Javi uvijek radiš ili sa referencama ili
sa primitivnim tipovima i preko referenci manipulišeš objektima na koje ovi pokazuju (referenciraju).
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme