Witam.
Piszę właśnie Xleta, którego zadaniem będzie wyświetlić na części ekranu menu z ustawionym stopniem przezroczystości i kilkoma opcjami do wyboru. Dodam, że korzystam z emulatora XletView. Problem pojawia się przy próbie ustawienia przezroczystości menu - w logu dostaję NullPointerException, a na ekranie nic się nie pojawia. Metodą prób i błędów (tj. komentowania linijek kodu podejrzanych za powodowanie błędu) doszłam, że ów problem pojawia się przy próbie wywołania metody getGraphics():
import java.awt.Color;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import javax.tv.xlet.XletStateChangeException;
import org.dvb.ui.DVBAlphaComposite;
import org.dvb.ui.DVBGraphics;
import org.dvb.ui.UnsupportedDrawingOperationException;
import org.havi.ui.*;
import java.awt.*;
public class Zad2Xlet implements Xlet {
HScene scena;
HSceneFactory fabryka;
HSceneTemplate szablon;
HListGroup menu;
HListElement obrazek;
HListElement komponenty;
HListElement kompozycje;
HListElement koniec;
XletContext kontekst;
public void destroyXlet(boolean arg0) throws XletStateChangeException {
}
public void initXlet(XletContext arg0) throws XletStateChangeException {
kontekst = arg0;
fabryka = HSceneFactory.getInstance();
szablon = new HSceneTemplate();
menu = new HListGroup();
obrazek = new HListElement("Obrazek");
komponenty = new HListElement("Komponenty");
kompozycje = new HListElement("Kompozycje");
koniec = new HListElement("Koniec");
HScreenDimension rozmiar = new HScreenDimension(1f, 1f);
HScreenPoint polozenie = new HScreenPoint(0.5f, 0.5f);
szablon.setPreference(HSceneTemplate.SCENE_SCREEN_DIMENSION, rozmiar, HSceneTemplate.PREFERRED);
szablon.setPreference(HSceneTemplate.SCENE_SCREEN_LOCATION, polozenie, HSceneTemplate.PREFERRED);
scena = fabryka.getBestScene(szablon);
menu.setBounds(0, 0, 300, 500);
menu.addItem(obrazek, 0);
menu.addItem(komponenty, 1);
menu.addItem(kompozycje, 2);
menu.addItem(koniec, 3);
try {
DVBGraphics gc = (org.dvb.ui.DVBGraphics) menu.getGraphics(); // <<<<<<< BŁĄD: Wyjątek w menu.getGraphics() -> NullPointerException
DVBAlphaComposite reg = DVBAlphaComposite.getInstance(DVBAlphaComposite.SRC, 0f);
gc.setDVBComposite(reg);
}
catch (ClassNotFoundException e) {
System.err.println(e.getMessage()+"Nie znaleziono klasy");
e.printStackTrace();
}
scena.add(menu);
scena.setVisible(true);
}
public void pauseXlet() {
// TODO Auto-generated method stub
}
public void startXlet() throws XletStateChangeException {
scena.show();
}
}
Pojawia się pytanie: czy faktycznie błąd jest gdzieś w kodzie, czy to może wina emulatora?