J2ME Canvas kaputt?
-
Moin zusammen,
vielleicht weiss jemand Rat.
Ich hab n Midlet und will eigentlich nur den Screen updaten
Dazu habe ich mir eine Klasse gemacht welche ich von Canvas abgeleitet habe.MyCanvas extends Canvas
die Paint Methode sollte ein schwarzes Rechteck malenCanvas c = MyCanvas()
display.setCurrent(c);
c.repaint()Klingt soweit vernünftig.
Wenn ich nun aber Spasseshalber irgendwas laden will oder den Thread mal schlafen lege...
Canvas c = MyCanvas()
display.setCurrent(c);
c.repaint()
Thread.sleep(5000);
sout("5 sek vorbei");
Thread.sleep(5000);
sout("10 sek vorbei");Dann passiert gar nichts. Da wird nix gepaintet. Zuerst wird alles andere gemacht. In diesem Falle 10 sek gewartet, bis sich die paint methode mal bemüht.
Was läuft da ab? was muss ich ändern?
-
Du willst, dass er was tut während er schläft???
noobie schrieb:
Was läuft da ab? was muss ich ändern?
Das was du programmierst. Deine Vorgehensweise.
-
Nein.
Das mit dem Sleep habe ich nur dahin geschrieben um zu sehen ob er irgendwann einmal irgendwas dazwischen macht (System.out.println macht er ja dazwischen)
Er zeichnet aber den Screen nicht neu.Die Grundsätzliche Idee war mal, dass das Prog. den Screen schwarz zeichnet und dann, erst dann, beginnt weitere Daten zu laden.
[ APP START (MIDlet) ] [e]darr[/e] [ BASIS DATEN LADEN ] [e]darr[/e] [ DISPLAY SCHWARZ ZEICHNEN ] [e]darr[/e] [ HAUPTDATEN LADEN(warten bis geladen) ] [e]darr[/e] [ ANDERES DISPLAY ANZEIGEN(abhängig von den HauptDaten) ]
Ich habe auch versucht mit einer "leeren" Schleife zu warten bis ich die Meldung kriege, dass das Bild nun angezeigt wird(isShown()). Was in einer endlosen Warterei endete. (repaint und alles habe ich verwendet)
Das mit dem Thread.sleep war nur ein Test um zu sehen ob das Prog. sauber linear abgearbeitet wird... was es anscheinend ja nicht wird.Der schwarze Screen soll eigentlich einfach sowas wie ein LoadingScreen sein. Dazu gedacht, dass nicht der letzte Screen wie festgefroren angezeigt wird,
während das Daten nachlädt.Ich habe den Schwarz-Screen auch schon als Thread gestartet:
[ APP START (MIDlet) ] [e]darr[/e] [ BASIS DATEN LADEN ] [e]darr[/e] [e]darr[/e] [ HAUPT-DATEN LADEN ][ NEUER THREAD(schwarzmalerei)] [e]darr[/e] [e]darr[/e] [ WEITER LADEN] [ SCREEN ZEICHENEN loop] [e]darr[/e] (Wenn fertig geladen, den schwarzmalerei Thread beenden) [ ANDERES DISPLAY ANZEIGEN(abhängig von den HauptDaten) ]
Hat auch nicht funktioniert...
Erst als die Daten geladen waren, wurde kurz der schwarze Screen angezeigt (ein flackern). Dann wurde gleich der nächste Screen angezeigt....Wie muss ich es denn aufbauen, damit sich die APP so verhält wie ich es wünsche?
-
das j2me gui tk is wie alle anderen auch singlethreaded, den rest kannst dudir dann ja zusammenreimen. dein thread-versuch is allerdings ziemlich miserabel und sinnlos
-
Wenn ein Maler was zeichnnet dann schläft, nen farbtopf umwirft und dann wieder schläft, dann hat er immer noch nichts neues gezeichnet, obwohl er zwischendurch was getan hat.
-
@klo: Eine Information und eine Beleidigung. Was ist mit dir los? Erklär mir wenigstens was ich besser machen könnte... zumindest Ansatzweise.
@Benutzer: Könntest Du mir wenigstens grob skizzieren wie ich vorgehen müsste? Ich habe keine Ahnung, wie ich es sonst lösen könnte. Das sind gerade meine ersten Steps mit J2ME...
-
na, wenn die berchnungen so lang brauchen, dass der user merkt, dass nichts gezeichnet wird, dann musst du halt noch nen thread starten, damit der "Mal"-Thread weiterarbeiten kann.