[java | midlet] Applicatie stoppen hoe?

Pagina: 1
Acties:

  • clooner
  • Registratie: Augustus 2000
  • Laatst online: 18-09-2024
Hallo,

deze code roept de class MyCanvas aan maar hoe kan ik vanuit deze class de applicatie stoppen? als ik vanuit de class MyCanvas de functie destroyApp aanroep dan krijg ik deze error: non-static method destroyApp(boolean) cannot be referenced from a static context

Ik zit er al een tijdje naar een oplossing te zoeken. Hopelijk heeft iemand die voor mij

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
 
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
 
public class MyMIDlet extends MIDlet {
 
 public MyCanvas myCanvas;
 public Display display;
 
 public MyMIDlet() {
  myCanvas = new MyCanvas();
  display =  Display.getDisplay(this);
 }
 
 public void startApp(  ) {
  display.setCurrent(myCanvas);
 }

 public void pauseApp(  ) {
 }
 
    public void destroyApp(boolean unconditional)
    {
        notifyDestroyed();
    }
    
}

Inside The Matrix, they are everyone, and they are no one.


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:44

Gonadan

Admin Beeld & Geluid, Harde Waren
.

[ Voor 137% gewijzigd door Gonadan op 14-02-2006 11:26 . Reden: ik ben blind |:( ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • clooner
  • Registratie: Augustus 2000
  • Laatst online: 18-09-2024
um, waarom staat destroyApp in pauseApp?
Dat staat hij niet en wat je zegt dat werkt niet omdat destroyApp niet in myCanvas zit

[ Voor 32% gewijzigd door clooner op 14-02-2006 11:25 ]

Inside The Matrix, they are everyone, and they are no one.


Verwijderd

Laat anders eens wat code zien die de functie aanroept. Dit moet haast een static functie zijn?


(idd, maar uitlijnen is wat beter :+ )

[ Voor 20% gewijzigd door Verwijderd op 14-02-2006 11:26 ]


  • clooner
  • Registratie: Augustus 2000
  • Laatst online: 18-09-2024
Ik roep de functie zo aan

Java:
1
2
3
4
5
6
7
8
public void keyPressed(int code)
{
   int action = getGameAction(code);
   if (action == 8)
   {
    MyMIDlet.destroyApp(true);
   }
}

Inside The Matrix, they are everyone, and they are no one.


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:44

Gonadan

Admin Beeld & Geluid, Harde Waren
Waarschijnlijk probeer je zoiets als MyMidlet.destroApp(boolean);

Als je een referentie meegeeft van je de MyMidlet instantie, dan kan je de functie aanroepen
iets lelijks als new MyCanvas(this) :|

Edit:
Ja dus, ik moet sneller typen ;)

[ Voor 10% gewijzigd door Gonadan op 14-02-2006 11:29 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

Het lijkt er een beetje op alsof de variable "MyMIDlet" geen variable is, maar de classe naam.
Op een classe kun je alleen static methodes aanroepen. Je moet eerst een instantie van dat object "MyMIDlet" hebben, daar kan je dan de public functie van aanroepen.

  • clooner
  • Registratie: Augustus 2000
  • Laatst online: 18-09-2024
Gonadan schreef op dinsdag 14 februari 2006 @ 11:28:
Waarschijnlijk probeer je zoiets als MyMidlet.destroApp(boolean);

Als je een referentie meegeeft van je de MyMidlet instantie, dan kan je de functie aanroepen
iets lelijks als new MyCanvas(this) :|
Ok heb je een voorbeeldje van hoe dit moet? Ik snap dat het moet maar weet niet hoe

Inside The Matrix, they are everyone, and they are no one.


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:44

Gonadan

Admin Beeld & Geluid, Harde Waren
Constructor:
Java:
1
2
3
4
5
MyMidled ref;

public MyCanvas(MyMidled m) {
    ref = m;
}

Aanroep
Java:
1
2
3
4
5
6
7
8
public void keyPressed(int code) 
{ 
   int action = getGameAction(code); 
   if (action == 8) 
   { 
    ref.destroyApp(true); 
   } 
}


Denk ik

en dan dus maken met:
Java:
1
myCanvas = new MyCanvas(this);

[ Voor 12% gewijzigd door Gonadan op 14-02-2006 11:34 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

dat moet inderdaad werken, voor de duidelijkheid je moet MyCanvas() vervangen door MyCanvas(this), zoals die andere al zei.
Je geeft dus een referentie van jezelf mee. (instantie), MyCanvas kan dan deze referentie gebruiken om later de public methodes aan te roepen

(aha, bovenstaande bericht heeft een edit gehad :*) )

[ Voor 10% gewijzigd door Verwijderd op 14-02-2006 11:37 ]


  • clooner
  • Registratie: Augustus 2000
  • Laatst online: 18-09-2024
Yup dit werkt geweldig bedankt

dit is dus de uiteindelijke code geworden

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
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
 
public class MyMIDlet extends MIDlet {
 
 public MyCanvas myCanvas;
 public Display display;
 
 public MyMIDlet() {
  myCanvas = new MyCanvas(this);
  display =  Display.getDisplay(this);
 }
 
 public void startApp(  ) {
  display.setCurrent(myCanvas);
 }

 public void pauseApp(  ) {
 }
 
    public void destroyApp(boolean unconditional)
    {
        notifyDestroyed();
    }
    
}


en

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    MyMIDlet ref;   
    
    public MyCanvas(MyMIDlet m)
    {
        ref = m; 
        maakMenu();
    }

    public void keyPressed(int code)
    {
    if (action == 8)
    {
        ref.destroyApp(true); 
    }
    }     

Inside The Matrix, they are everyone, and they are no one.


  • momania
  • Registratie: Mei 2000
  • Laatst online: 07:21

momania

iPhone 30! Bam!

Je maakt een static call naar een non-static method, vandaar dat het niet werkt ;)

Als je niet begrijpt wat dat is, moet je je eerst wat meer in java programmeren algemeen verdiepen denk ik alvorens je met midlets/applets/etc aan de gang gaat :)

Neem je whisky mee, is het te weinig... *zucht*


  • clooner
  • Registratie: Augustus 2000
  • Laatst online: 18-09-2024
momania schreef op dinsdag 14 februari 2006 @ 11:38:
Je maakt een static call naar een non-static method, vandaar dat het niet werkt ;)

Als je niet begrijpt wat dat is, moet je je eerst wat meer in java programmeren algemeen verdiepen denk ik alvorens je met midlets/applets/etc aan de gang gaat :)
Heb je niks nuttigs toe te voegen???

Inside The Matrix, they are everyone, and they are no one.


  • momania
  • Registratie: Mei 2000
  • Laatst online: 07:21

momania

iPhone 30! Bam!

clooner schreef op dinsdag 14 februari 2006 @ 11:42:
[...]


Heb je niks nuttigs toe te voegen???
Jawel: jou vertellen dat dit echte basics van java programmeren zijn en dat het mij verstandiger lijkt om je daar eerst beter in te verdiepen alvorens je met dit soort dingen als midlets etc aan de slag gaat.

Is maar een tip hoor ;)

Neem je whisky mee, is het te weinig... *zucht*


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 12:44

Gonadan

Admin Beeld & Geluid, Harde Waren
momania schreef op dinsdag 14 februari 2006 @ 11:44:
[...]

Jawel: jou vertellen dat dit echte basics van java programmeren zijn en dat het mij verstandiger lijkt om je daar eerst beter in te verdiepen alvorens je met dit soort dingen als midlets etc aan de slag gaat.

Is maar een tip hoor ;)
Je kan hem natuurlijk ook uitleggen wat static en non-static inhoudt. :)

Als je een class maakt, bv Math() met reken functies. Dan kan dat op 2 manieren:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Math {

  public int add(int a, int b) {
    return a+b;
  }
}

// en aanroepen met
Math m = new Math();
int result = m.add(1,2);

//OF
class Math {

  public static int add(int a, int b) {
    return a+b;
  }
}

// en aanroepen met
int result = Math.add(1,2);


De eerste is non-static, de tweede is static.
Als een methode non-static is moet je eerst een object van die klasse maken.
Dus als je van een specifiek object een methode wilt aanroepen zal hij ook nooit static kunnen zijn.

Static functies zijn vooral handig als het alleen maar een handeling hoeft uit te voeren, en niet specifiek voor een object iets moet doen (zoals destroy)

[ Voor 7% gewijzigd door Gonadan op 14-02-2006 11:53 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Verwijderd

En ach, al doende leert men!
Maar het is wel verstand om eerst eens met de foutmelding te googlen. Dan kom je wel wat verder. Zulke dingen zijn wel aardig basic...

  • clooner
  • Registratie: Augustus 2000
  • Laatst online: 18-09-2024
Je kan hem natuurlijk ook uitleggen wat static en non-static inhoudt. :)
Kijk hier heb ik nou wel iets aan!

Erg bedankt _/-\o_

Inside The Matrix, they are everyone, and they are no one.


  • Tjoekbezoer
  • Registratie: Maart 2003
  • Laatst online: 06-12-2025
clooner schreef op dinsdag 14 februari 2006 @ 17:39:
[...]


Kijk hier heb ik nou wel iets aan!

Erg bedankt _/-\o_
Je moet gewoon eerder beginnen met je school opdracht, niet een week van tevoren ;)
Pagina: 1