webForumDet fria alternativet

Problem med UI i MIDlet

4 svar · 442 visningar · startad av front

frontMedlem sedan aug. 2000380 inlägg
#1

Har lite problem med mitt UI i en MIDlet. Försöker växla mellan att visa en List och en Form, men det vill sig inte riktigt.

I mitt program så anropar jag metoden Display.setCurrent() med en Form som argumet. Sedan går programmet genom lite information för att slutligen pressentera den i en List genom att anropa Display.setCurrent() med List:en som argument.

Problemet är att min List visas först, och inte Form som det är tänkt.
Antar att det är ett problem med trådar... men efter ett antal misslyckde försök med synchronized så är jag nära att ge upp.

Har gjort ett litet testprogram som jag försöker arbeta med för att hitta problemet. Detta program ska visa en Form, låta programmet sova 5 sek och sedan visa en List.
Nu så sover det 5 sek (utan att visa en Form under tiden) och visar sen en List.
Skulle vara gött om någon kan klura ut problemet med det programmet, så ska jag nog kunna gå vidare därifrån.

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class ListTest extends MIDlet {
	
	private Display display;
	private List list;
	private Form form;
	
	public ListTest() {
		super();
		display = Display.getDisplay(this);
		list = new List("List", Choice.IMPLICIT);
		form = new Form("Form");
		
		list.append("List", null);
		form.append("Form");

		display.setCurrent(form);
		
		try {
			Thread.sleep(5000);
		} catch (Exception e) {}
		
		display.setCurrent(list);
	}

	protected void startApp() {
	}

	protected void pauseApp() {

	}

	protected void destroyApp(boolean arg) {

	}

}
MinOrkMedlem sedan aug. 2000234 inlägg
#2

Vet inte om det hjälper (programmerar inte i Java), men i Delphi kan man köra Application.ProcessMessages för att programmet skall köra klart allt det håller på med innan det går vidare (ungefär). Finns det inget sånt?

frontMedlem sedan aug. 2000380 inlägg
#3

Jo det finns lite liknande trick i Java, men jag får inget att fungera...

Hittade detta i midp 2.0 dokumentationen:

Requests that a different Displayable object be made visible on the display. The change will typically
not take effect immediately. It may be delayed so that it occurs between event delivery method calls,
although it is not guaranteed to occur before the next event delivery method is called. The
setCurrent() method returns immediately, without waiting for the change to take place.

Känns inte så smidigt :x

LimeMedlem sedan sep. 2001961 inlägg
#4

Nu vet jag inte hur det görs i Midlets men i normala GUI-program med multipla komponenter så ser jag alltid till att skapa ett event i den komponent jag vill visa. Går det att göra något liknande??

frontMedlem sedan aug. 2000380 inlägg
#5

Sådär, nu har jag äntligen fått lite tid över för att kolla på det här problemet igen.
Försökte med Limes tips, men jag fick det inte att fungera.

Sökte då runt på java.sun.com ett par vändor och hittade tillslut det jag sökte:
Networking, User Experience, and Threads

141 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)