j2me мидлет двойной поток не удалось перезвонить - PullRequest
0 голосов
/ 15 ноября 2010

хорошо, так что я получил эту настройку: мидлет

    Gui extends Midlet{
        private static Gui instance;

        protected void startApp() {
            Display.getDisplay(this).setCurrent(MyForm.getInstance());
        }

            private static final Logger log = LoggerFactory.getLogger();

        public static Datacheck getInstance() {
            return instance;
        }

        public Gui() {
            // Configure logging
        }

        protected void startApp() {
            instance = this;
            Display.getDisplay(this).setCurrent(MyForm.getInstance());
        }

        protected void pauseApp() {
        }

        protected void destroyApp(boolean bool) {
            // Shutdown Microlog gracefully
            LoggerFactory.shutdown();
            notifyDestroyed();
        }

        public static void log(Level level, String message) {
            log.log(level, message);
        }

        public void requestScreen(Form screen) {
            log.info("request screen called");
            Display.getDisplay(this).setCurrent(screen);
        }
    }

форма

    MyForm extends Form{
        private static MyForm instance;

        public static MyForm getInstance() {
            if (instance == null) {
                instance = new MyForm();
            }
            return instance;
        }

        private Form(){
            //start task
            new Timer().scheduleAtFixedRate(new PollingService(CallsDialog.getInstance()), 0, UPDATE_INTERVAL);

            //add gui elements ....
        }

        private void updateForm() {
            //never gets executed
        }
    }

и нить

    MyThread implements Runnable{
        private MyForm handle;

        public PollingService(MyForm handle) {
            this.handle = handle;
        }

        public void run() {
            handle.updateForm();
        }
    } 

поэтому мидлет запускается, устанавливает свою форму на экземпляр MyForm тогда myform создает новый поток этот поток должен вызывать функцию myform каждые 5 секунд

это сильно упрощенный пример реальной вещи, поэтому, пожалуйста, не меняйте дизайн нити

теперь, когда я выполняю метод из класса "MyForm" это не выполняется я не получаю никаких ошибок

Кто-нибудь знает, что я делаю не так?

редактировать изменено, так что нет созданного потока (уже выполнено timertask)

1 Ответ

1 голос
/ 15 ноября 2010

1) Вам не нужно создавать отдельный поток для выполнения TimerTask. Механизм Timer и TimerTask уже содержит создание нового потока для каждого выполнения TimerTask.

2) Не могли бы вы предоставить код, который имеет больше реальности? В вашем примере нет ни создания MyThread, ни вызова start (). Иногда ошибка просто отсутствует вызов метода.

...