forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Программирование (http://forum.boolean.name/forumdisplay.php?f=54)
-   -   проблема с TimerTask (http://forum.boolean.name/showthread.php?t=1791)

SubZer0 26.10.2006 21:09

проблема с TimerTask
 
Сижу ужо целый день мучаюсь и наконецто понял... вернее нашел где ошибка...

дело короче обстоит так: у меня игра, главный цикл висит на TimerTask, система такая, что при выигрыше стадии, нужно отменить выполнение главного цикла и передать управление менеджеру, который загрузит новые параметры (картинки и т.п.) и поновой запустит главный цикл...

но не тут то было, отмененный Sheduler снова не запускается... :(

пример простой программы:

Код:

import java.util.Timer;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Midlet extends MIDlet {
   
    public static LoopProgram Loop = new LoopProgram();
           
    public static Timer T=null;
   
    public void startApp() {


        T = new Timer();
        T.schedule(Loop, 0, 25 );
       
       
    }
   
    public void pauseApp() {
    }
   
    public void destroyApp(boolean unconditional) {
    }
   
}

ну и сам ТаймерТаск

Код:

import java.util.Timer;
import java.util.TimerTask;

public class LoopProgram extends TimerTask {
   
    public static Midlet Main;
   
    int I=0;
   
    int J=0;
   
    public void run() {
        System.out.println("Loop "+I+++" Task "+J);
       
       
        if (I==50) {
            Main.T.cancel();
            Main.T = new Timer();
            Main.T.schedule(Main.Loop, 0, 25 );
            J++;
        }
       
    }
}

если процедура вызвалась 50 раз, то переинициализировать таймер...

получается что ничего не получается (перл но так оно и есть)...


прошу помощи, работоспособная альтернатива тоже приветствуется. :)

SubZer0 26.10.2006 22:44

Re: проблема с TimerTask
 
альтернатива конено есть, например завести глобальную переменную, и по ней определять выполнять главный цикл или нет, и выключать ее когда нужно...

но вопрос остается в силе, неужели в яве нереально перестартовать ТаймерТаск?

:)

Piligrim 27.10.2006 10:31

Re: проблема с TimerTask
 
Terminates this timer, discarding any currently scheduled tasks. Does not interfere with a currently executing task (if it exists). Once a timer has been terminated, its execution thread terminates gracefully, and no more tasks may be scheduled on it.

Надо
Main.T = new Timer();
Main.T.schedule(new LoopProgram(), 0, 25 );


Часовой пояс GMT +4, время: 02:08.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot