Witam,
Problem jest następujący: Program ma wyświetlić obrazkowe logo, potem przejść do listy wyboru opcji, następnie do formularza z jednym polem i, w zależności od wybranej wcześniej opcji, pokazać wynik. Przy odpalaniu dostaję "Exception! Application has unexpectedly quit". Nie jestem ekspertem, dopiero się uczę, a to niestety jest pilne na zaliczenie :(
Kod wygląda tak:

import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class Pasy_app extends MIDlet implements CommandListener {
    
    //wyświetlacz
    private Display display;
    //komendy
    private Command CMdalej, CMwyjdz, CMlista;
    //pierwszy ekran
    private Form logo;
    private ImageItem obrazek;
    //drugi ekran - menu
    private List menu;
    private String[] lista = { 
        "1 dla zarysu 3M",
        "2 dla zarysu 5M",
        "3 dla zarysu 8M",
        "4 dla zarysu 14M",
        "5 dla zarysu XL",
        "6 dla zarysu L",
        "7 dla zarysu H",
        "8 dla zarysu XH",
        "9 dla zarysu T5/AT5",
        "10 dla zarysu T10/AT10",
        "11 obliczanie długości podziałowej pasa"
    };
    //trzeci ekran - formularz - podajemy dane
    private Form dane;
    private TextField pole1;
    //czwarty ekran - formularz
    private Form dane2;
    private TextField pole2, pole3, pole4;
    //piąty ekran - wyniki działania
    private TextCanvas wyniki;
    //szósty ekran - autorzy
    private DeveloperCanvas autorzy;
    
    /*
     * FUNKCJE GŁÓWNE PROGRAMU
     */
    public Pasy_app() {
        CMdalej = new Command("Dalej", Command.OK, 10);
        CMwyjdz = new Command("Wyjdź", Command.OK, 0);
        CMlista = new Command("Powrót", Command.OK, 1);
        
        //1. ekran
        logo = new Form("Start");
        try {
            obrazek = new ImageItem("logo", Image.createImage("logo.png"), ImageItem.LAYOUT_DEFAULT, "");
        } catch (IOException ex) { }
            logo.append(obrazek);
            logo.addCommand(CMdalej);
        //2.ekran - menu
        menu = new List("WYBIERZ TYP PASA:", List.IMPLICIT);
        for(int i = 0; i < lista.length; i++)
        {
            menu.append(lista[i], null);
        }    
        menu.addCommand(CMdalej);
        //3. ekran; podanie danych do obliczeń
        dane = new Form("Podaj długość przedziałową pasa");
        pole1 = new TextField("Długość:","",8,TextField.NUMERIC);
        dane.append(pole1);
        dane.addCommand(CMdalej);
        //4. ekran; podanie danych dla 11. opcji
        dane2 = new Form("Obliczanie długości przedziałowej pasa");
        pole2 = new TextField("Rozstaw osi:         ","",8,TextField.NUMERIC);
        pole3 = new TextField("Średnica podziałowa: ","",8,TextField.NUMERIC);
        pole4 = new TextField("Długość podziałowa:  ","",8,TextField.NUMERIC);
        dane2.append(pole2);
        dane2.append(pole3);
        dane2.append(pole4);
        dane2.addCommand(CMdalej); 
        //5. ekran - wyniki działania
        wyniki = new TextCanvas();
        wyniki.addCommand(CMwyjdz);
        wyniki.addCommand(CMlista);
    }    

    public void startApp() {
        //domyślny ekran startowy - logo
        display.setCurrent(logo);
        logo.setCommandListener(this);
    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d) {
        if(c==CMdalej && d==logo) {
            display.setCurrent(menu);
            menu.setCommandListener(this);
        }
        if(c==CMdalej && d==menu)
        {
            int index = menu.getSelectedIndex();
            if(index == 10) {
                display.setCurrent(dane2);
                dane2.setCommandListener(this);
            }
            else {
                display.setCurrent(dane);
                dane.setCommandListener(this);
            }
        }
        if(c==CMdalej && d==dane)
        {
            wyniki.dlugosc = Double.parseDouble(pole1.getString());
            display.setCurrent(wyniki);
            wyniki.setCommandListener(this);
        }
        if(c==CMdalej && d==dane2)
        {
            int A = Integer.parseInt(pole2.getString());
            int Dp = Integer.parseInt(pole3.getString());
            int dp = Integer.parseInt(pole4.getString());
            wyniki.dlugosc = 2*A+1.57*(Dp+dp)+((Dp-dp)*(Dp-dp))/(4*A);
            display.setCurrent(wyniki);
            wyniki.setCommandListener(this);
        }  
        if(c==CMwyjdz && d==wyniki)
        {
            autorzy = new DeveloperCanvas();
            display.setCurrent(autorzy);
            autorzy.setCommandListener(this);
            try {
                Thread.sleep(3000);
            } catch (InterruptedException ex) { }
            destroyApp(false);
            notifyDestroyed();
        }
        if(c==CMlista && d==wyniki) {
            display.setCurrent(menu);
            menu.setCommandListener(this);
        }        
    }
}

Ponieważ się nie znam, mogę się mylić, ale moja myśl poszła taką drogą: najbardziej podejrzany jest tu obrazek. W takim wypadku wyrzuciłem go z kodu, nic nie pomogło. Pomyślałem też, żeby ustawić na start nie ekran z logo, ale jakiś inny, np. od razu listę. Też nie pomogło; kombinacje jednego i drugiego nie pomagają. Macie jakiś pomysł?
Z góry dzięki