[java ME/MIDP] Inconsistent or missing stackmap at target

Pagina: 1
Acties:

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Ik moet wat research doen naar mobile games in java voor mijn stage, maar nu stuit ik op een raar probleem.

Ik heb de volgende MIDlet:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Test extends MIDlet implements Runnable
{
    Display     display;
    TestCanvas  canvas;
    Thread      thread;
    boolean     running;

    public Test ()
    {
        display = Display.getDisplay (this);
        canvas = new TestCanvas ();
    }

    public void startApp ()
    {
        display.setCurrent (canvas);
        running = true;
        thread = new Thread (this);
        thread.start ();
    }

    public void pauseApp ()
    {
        running = false;
        thread = null;
    }

    public void destroyApp (boolean pForce)
    {
    }

    public void run ()
    {
        while (running)
        {
            canvas.repaint ();
            try { Thread.sleep (100); }
            catch (InterruptedException e) { }
        }
    }


    class TestCanvas extends Canvas
    {
        int         counter = 0;

        public TestCanvas ()
        {
        }

        public void paint (Graphics g)
        {
            if (++counter > 500)
            {
            }
            else
            {
            }
        }
    }
}


Nou start ik die heel leuk in de emulator (WTK 1.0.4), en dan krijg ik na het starten van mijn MIDlet deze error:

code:
1
2
3
4
5
6
7
8
9
10
11
Execution completed successfully
3189 bytecodes executed
2 thread switches
319 classes in the system (including system classes)
239 dynamic objects allocated (11212 bytes)
2 garbage collections (4808 bytes collected)
Total heap size 500000 bytes (currently 489500 bytes free)
Error verifying method Test$TestCanvas paint(Ljavax/microedition/lcdui/Graphics;)V
Approximate bytecode offset 14: Inconsistent or missing stackmap at target
ALERT: Error verifying class Test$TestCanvas
Press any key to continue . . .


Ik snap er niets van :?
De code is vrij simpel. Het compiled prima, en ook preverify geeft verder geen problemen. Overigens, als ik preverify er niet overheen gooi dan krijg ik een error in mijn run () methode, dus hij veranderd wel wat.

Grappige is dat ie het zonder de if-statement in Test.TestCanvas.paint () gewoon prima doet. Nadat de if om de code heen was gezet werkte het niet meer (ik heb de code in de if-statement eruit gehaald, het maakte niet uit of daar nou wel of niet iets in stond)

Heeft iemand een idee wat er aan de hand is?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
|:(

het was een stomme fout. De compiler genereert natuurlijk 2 classes, Test.class en Test$TestCanvas.class. Die 2e werd niet gepreverified, en dus crashte ie daarop

problem solved :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Dom dom dom ;)

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 13-08 17:12

NDF82

Doomed Space Marine

[offtopic]wisten ze dat niet op gameskool ;) [offtopic]

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


Verwijderd

ook een beetje offtopic maar;
heb je er wel is over nagedacht wat er gebeurd als je twee keer achter elkaar startApp() aanroept?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
markvleth: kort maar krachtig: nee :P

Overigens zou dat niet moeten gebeuren, startApp () wordt pas aangeroepen als de MIDlet net gestart is, of uit de gepauzeerde stand komt. Als ie net gestart is is er nog geen thread, en als ie gepauzeerd is ook niet aangezien de thread bij een pauze op stop wordt gezet.

Maar je hebt idd gelijk dat daar wel een check in zou kunnen, om ranzige bugs te voorkomen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1