Двухпоточный мидлет j2me не смог выполнить обратный вызов

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

    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», он не выполняется, я не получаю никаких ошибок

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

edit изменено, поэтому поток не создается (уже выполнено timertask)


person Berty    schedule 15.11.2010    source источник
comment
попробуйте поместить SOPs и распечатать трассировку стека в catch, попробуйте отладить, код выглядит нормально.   -  person jmj    schedule 15.11.2010


Ответы (1)


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

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

person Donz    schedule 15.11.2010
comment
спасибо за ответ, проблема заключалась в том, что форма обновления на самом деле выглядела так: updateGui(element, checkIfSoundNotifyIsNeeded()); теперь checkIFSoundNotifyIsNeeded выдает исключение (nullpointer), остальное я смогу исправить :), хотя вы не получаете никаких ошибок: s - person Berty; 21.11.2010