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