[J2ME] Een pauze voor het sluiten

Pagina: 1
Acties:

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 26-11 22:52
Hey mensen!

Ik ben net begonnen met J2ME en ik wil graag een alert tonen (2 sec.) en dan het programma sluiten, dit is daarvoor de code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
//alert aanmaken die weergegeven wordt bij het afsluiten van de midlet
alert = new Alert("Vaarwel", "Ciao Ciao", null, AlertType.INFO);

display.setCurrent(alert); // de alert weergeven op het beeld.
/////////////////////////////////
////////////////////////////////
// dit blijft geen 2 seconden staan, ook al heb ik dat ingesteld.

alert.setTimeout(2000); // En dit werkt ook niet

// programma helemaal afsluiten.
notifyDestroyed();

Ik heb het geprobeerd met een thread, maar dan komen er 2 seconden pauze en daarna komt er een miliseconde een alert en sluit hij gelijk.

Op deze manier sluit de app gelijk...

[ Voor 8% gewijzigd door plofkip op 31-01-2007 20:20 ]


  • MetroidPrime
  • Registratie: Oktober 2003
  • Laatst online: 01-11 10:08

MetroidPrime

Turn it up loud, captain!

Ik heb zelf niet zoveel ervaring met JME, maar volgens mij zorgt setTimeout er niet voor dat de volgende regel code wordt uitgesteld. Hierdoor wordt je midlet afgesloten meteen nadat je je alert weergeeft. Je zou setTimeout kunnen proberen te vervangen door Thread.sleep(2000).

"Some girl on the street outside the bar just asked me if I was saved yet." "Yeah? What did you say?" "I told her 'I saved at the checkpoint a couple of minutes back and I can reload from there if I die.'


  • Jaap-Jan
  • Registratie: Februari 2001
  • Nu online
En als je setTimeout() aanroept voordat je je alert weergeeft? Ik denk dat het komt doordat je alert wordt weergegeven en pas daarna stel je een timeout in, beetje rare volgorde :).

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 26-11 22:52
MetroidPrime schreef op woensdag 31 januari 2007 @ 20:36:
Ik heb zelf niet zoveel ervaring met JME, maar volgens mij zorgt setTimeout er niet voor dat de volgende regel code wordt uitgesteld. Hierdoor wordt je midlet afgesloten meteen nadat je je alert weergeeft. Je zou setTimeout kunnen proberen te vervangen door Thread.sleep(2000).
Dan pauzeert de app inderdaad 2 seconden, maar daarna wordt de alert weergegeven (een paar miliseconden) en sluit hij gelijk af...
(heb hem ná display.setCurrent(alert); gezet)

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

momania

iPhone 30! Bam!

Uhm, misschien gekke gedacht, maar wat dacht je er van om eerst de timeout te zetten en dan pas de Alert te laten zien? ;)

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


  • Down
  • Registratie: Februari 2005
  • Laatst online: 29-11 22:34
Aha, jij je bent dus net bezig met assignment 1? :Y)

Thread.sleep(2000) :+

Mother north, how can they sleep while their beds are burning?


  • Jaap-Jan
  • Registratie: Februari 2001
  • Nu online
Imodium schreef op woensdag 31 januari 2007 @ 21:55:
Aha, jij je bent dus net bezig met assignment 1? :Y)

Thread.sleep(2000) :+
Hmm, nog meer Windesheimstudenten hier dus :). Thread.sleep() zou ik niet gebruiken als setTimeout() ook werkt, een Thread.sleep() in het hoofdprogramma blokkeert het hele programma, dus er wordt niets meer getekend en noem maar op.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 26-11 22:52
Lol inderdaad, J2ME @ Windesheim :P
Java:
1
2
alert.setTimeout(2000);
display.setCurrent(alert); // de alert weergeven op het beeld.

Op deze manier zie je hem ook maar een paar miliseconden...

[ Voor 70% gewijzigd door plofkip op 01-02-2007 09:52 ]


  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 27-10 15:31
Java:
1
2
3
4
Alert timedAlert = new Alert("Vaarwel", "Ciao Ciao", null, AlertType.CONFIRMATION);
timedAlert.setTimeout(5000);
Display display = Display.getDisplay(this);
display.setCurrent(timedAlert);

Nee, geen Windesheim student ...

[ Voor 7% gewijzigd door djexplo op 01-02-2007 10:04 ]

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 26-11 22:52
djexplo schreef op donderdag 01 februari 2007 @ 09:58:
Java:
1
2
3
4
Alert timedAlert = new Alert("Vaarwel", "Ciao Ciao", null, AlertType.CONFIRMATION);
timedAlert.setTimeout(5000);
Display display = Display.getDisplay(this);
Display.setCurrent(timedAlert);

Nee, geen Windesheim student ...
In die volgorde doe ik het inderdaad...
Alleen na die Display.SetCurrent(alert); doe ik een notifyDestroyed(); en het lijkt wel of die notifyDestroyed() keihard doorgaat...

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 27-10 15:31
en het lijkt wel of die notifyDestroyed() keihard doorgaat...
Dat is logisch, die timeout kan je zien als een aparte thread.
Voor notiftyDestroyed moet je ook gewoon een timeout zetten:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyTask extends TimerTask 
{
    public void run() 
    {
        notifyDestroyed();
    }
}

Timer     timer = new Timer();
TimerTask task = new MyTask();

// wacht 5 seconden ...
timer.schedule( task, 5000 );

[ Voor 51% gewijzigd door djexplo op 01-02-2007 10:16 ]

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 26-11 22:52
djexplo schreef op donderdag 01 februari 2007 @ 10:10:
[...]

Dat is logisch, die timeout kan je zien als een aparte thread.
Voor notiftyDestroyed moet je ook gewoon een timeout zetten:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyTask extends TimerTask 
{
    public void run() 
    {
        notifyDestroyed();
    }
}

Timer     timer = new Timer();
TimerTask task = new MyTask();

// wacht 5 seconden ...
timer.schedule( task, 5000 );
Heb je ook een manier zonder een extra klasse aan te maken?

  • Down
  • Registratie: Februari 2005
  • Laatst online: 29-11 22:34
Ik weet ook wel dat Thread.sleep de main thread blokkeert maar in dit geval maakt dat niks uit, aangezien de sleep plaatsvindt voor de NotifyDestroyed().

Mother north, how can they sleep while their beds are burning?


  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 26-11 22:52
Ja en die staat ná de display.setCurrent(); maar toch gebeurt die sleep() eerder...

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 26-11 22:52
djexplo schreef op donderdag 01 februari 2007 @ 10:10:
[...]

Dat is logisch, die timeout kan je zien als een aparte thread.
Voor notiftyDestroyed moet je ook gewoon een timeout zetten:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyTask extends TimerTask 
{
    public void run() 
    {
        notifyDestroyed();
    }
}

Timer     timer = new Timer();
TimerTask task = new MyTask();

// wacht 5 seconden ...
timer.schedule( task, 5000 );
Heb het ongeveer op die manier voor elkaar gekregen, maar zonder timer:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MyTask extends MIDlet {
public void destroyApp(boolean unconditional) 
    {
        notifyDestroyed(); // Sluit de app
    }
}

public class One extends MIDlet implements CommandListener
{  
    private MyTask task;
    public void destroyApp(boolean unconditional) 
    {
        alert.setTimeout(2000);
        display.setCurrent(alert); // de alert weergeven op het beeld.
        task.destroyApp(false); // De app sluiten via MyTask klasse
    }
}

  • plofkip
  • Registratie: Oktober 2002
  • Laatst online: 26-11 22:52
OK het is me nu gelukt zonder extra klasse, als ik het niet vergeet zal ik hem na maandag posten...

  • Rockafello
  • Registratie: Maart 2005
  • Laatst online: 27-12-2023
hier nog iemand dus die assignment 1 moet maken. met de volgende code is het mij gelukt:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void commandAction(Command command, Displayable displayable) {
        if (displayable == textBox){
            if (command == quitCommand){
                alert = new Alert("Shutting Down", "Shutting down....", null, AlertType.CONFIRMATION);
                alert.setTimeout(2000);
                alert.setCommandListener(this);
                display.setCurrent(alert);
            }
        }
        else {
            destroyApp(false);
            notifyDestroyed();
        }
    }
Pagina: 1