Newsgroup: it.comp.java
Titolo: [j2me] NullPointerException

Ciao a tutti,
sto facendo qualche prova con J2ME e JDK1.4.1. E' da qualche giorno che
tento invano di visualizzare un'immagine ma senza successo, se provo a
scrivere del testo o disegnare cerchi e robe simili tutto OK, ma se provo a
caricare un'immagine ottengo sempre un NullPointerException.
Il progetto l'ho strutturato in questo modo
Bizarre
--->src (sorgenti)
--->res (contenente le immagini)
come da "manuale". Ho anche provato a spostare l'immagine un pò dappertutto
("e che c'azzecca?" diranno i guru). Ecco il codice:
---------
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
class BizarreCanvas extends Canvas{
 private Image splash;
 public void BizarreCanvas(){
 }
 protected void startApp(){
  try{
   splash = Image.createImage("/splash.png");
  }
  catch(Exception e){
   splash = null;
  }
 }
 public void paint(Graphics g){
  g.drawImage(splash, splash.getWidth(), splash.getHeight(),
   g.TOP|g.LEFT);
 }
}
public class Bizarre extends MIDlet{
 private Display display;
 private BizarreCanvas canvas;
 public Bizarre(){
  display = Display.getDisplay(this);
  canvas = new BizarreCanvas();
 }
 protected void startApp(){
  display.setCurrent(canvas);
 }
 protected void pauseApp(){
 }
 protected void destroyApp(boolean unconditional){
 }
 public void exitMIDlet(){
  destroyApp(true);
  notifyDestroyed();
 }
}
---------
Potete risovermi "l'arcano" motivo di questo errore?
Grazie

 
uhm... sicuro che sia png con livello di compressione 0?
per vedere che non sia un problema di posizionamento o formato immagine fa
cosi': creala con le primitive grafiche e poi mostrala con lo stesso codice
sull'emulatore.
Cosi dovresti trovare il problema.
Ciao

 sull'emulatore.
L'ho fatto e creando un'immagine con le primitive la visualizza. Ma che
diamine!

Credo che il problema sia questo: la riga
splash = Image.createImage("/splash.png");
è dentro a startApp() che non viene mai eseguito, se la metti nel
costruttore di BizzarreCanvas() dovresti risolvere il tuo problema.
Ciao


 diamine!
allora insisti, a occhio e croce potrebbe essere
1) nn e' png con 0 di compressione
2) nn e' dove vuole lui (controlla se nn hai fatto cose strane ai settaggi
dell'emulatore)
3) nn hai l'emulatore ben configurato
4) nn e' che su' un emulatore con settaggio screen bw usi immagini a colori
o troppo grandi? 
Che emulatore usi e su che os?
(io mi trovo bene con quello sun su linux)
e poi espandi il codice dell'eccezione se stampi su stderr il msg lo ritrovi
a console...
invece nel tuo codice metti a null l'immagine e continui com se nulla
fosse...
ciao 

 
veramente lo startApp viene eseguito TUTTE le volte che la MIDlet
torna/passa allo stato ACTIVE....
Ciao

 ha scritto nel messaggio
news:bff6ji$e3rk7$3...@ID-180235.news.uni-berlin.de...


 fosse...
Ho fatto un log di quello che accade, all'inizio dice che non riesce ad
aprire i file di configurazione, poi non trova qualche classe, eppure ho
installato tutto per bene:
Warning: could not open config
file(C:\WTK20\bin;C:\WTK104\bin\lib\internal.config): storageOpen()
C:\WTK20\bin;C:\WTK104\bin\lib\internal.config: Invalid argument
Warning: could not open config
file(C:\WTK20\bin;C:\WTK104\bin\lib\system.config): storageOpen()
C:\WTK20\bin;C:\WTK104\bin\lib\system.config: Invalid argument
Initializing class: 'java/lang/System'
Initializing class: 'com/sun/cldc/i18n/Helper'
Exception: java/lang/ClassNotFoundException
Initializing class: 'com/sun/kvem/cldc/i18n/j2me/GenericWriter'
Initializing class: 'com/sun/midp/security/SecurityDomain'
Initializing class: 'com/sun/midp/dev/Manager'
Initializing class: 'com/sun/midp/lcdui/Resource'
Exception: java/lang/ClassNotFoundException
Exception: java/lang/ClassNotFoundException
Initializing class: 'com/sun/midp/io/j2me/http/Protocol'
Initializing class: 'com/sun/midp/io/Properties'
Initializing class: 'com/sun/midp/io/j2me/storage/File'
Initializing class: 'javax/microedition/lcdui/Display'
Initializing class: 'com/sun/kvem/midp/lcdui/EmulEventHandler'
Initializing class: 'javax/microedition/lcdui/Font'
Initializing class: 'com/sun/midp/lcdui/MIDLetMap'
Initializing class: 'javax/microedition/lcdui/Screen'
Initializing class: 'java/lang/Integer'
Initializing class: 'javax/microedition/lcdui/List'
Initializing class: 'javax/microedition/lcdui/StringLayout'
Initializing class: 'javax/microedition/lcdui/ChoiceGroup'
Exception: java/io/IOException
Exception: java/io/IOException
Initializing class: 'javax/microedition/lcdui/TextBox'
Loading class 'Bizarre'
Creating class: 'Bizarre'
Loading class 'BizarreCanvas'
Creating class: 'BizarreCanvas'
Exception: java/lang/NullPointerException
Exception: java/lang/NullPointerException
java.lang.NullPointerException
 at BizarreCanvas.paint(+7)
 at javax.microedition.lcdui.Display.serviceRepaints(+105)
 at javax.microedition.lcdui.Display$DisplayAccessor.timerEvent(+34)
 at com.sun.kvem.midp.lcdui.EmulEventHandler$EventLoop.run(+545)
Execution completed successfully
59965 bytecodes executed
14 thread switches
321 classes in the system (including system classes)
681 dynamic objects allocated (27460 bytes)
5 garbage collections (14416 bytes collected)
Total heap size 500000 bytes (currently 482860 bytes free)
...c'ho perso il sonno! ;)

 
infatti lo ha la class MIDlet...
nn avevo fatto caso che c'erano due startApp().
e ovviamente quello usato con la classe Canvas nn viene chiamato ...
Sorry.

 MIDlet e non va lo stesso.
[snip]
invece pare che tu abbia messo uno startApp() che nn ci azzecca nulla in
BizarreCanvas ... (come diceva ivan) se sposti quel codice in
inizializzazione oppure nel vero startApp (quello di Bizarre) le cose
dovrebbero migliorare.
Ciao

 dovrebbero migliorare.
Ciao,
ho provato a eliminare lo startApp che non c'azzecca e messo il codice
nell'inizializzatore ma...nada!
Comincio a pensare che c'è uno spirito maligno nel mio PC! :D