j2me midlet双线程无法回调

时间:2010-11-15 06:56:27

标签: multithreading java-me callback handle midlet

好的,所以我得到了这个设置: 一个midlet

    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();
        }
    } 

所以midlet启动,将其Form设置为MyForm的实例 然后myform创建一个新线程 这个线程应该每隔5秒调用一次myform函数

这是一个非常简单的真实例子,请不要改变线程设计

现在当我从“MyForm”类执行一个方法时 它没有执行 我没有任何错误

谁知道我做错了什么?

修改的 已更改,因此没有创建任何线程(已由timertask完成)

1 个答案:

答案 0 :(得分:1)

1)您不需要创建单独的Thread来执行TimerTask。 Timer和TimerTask机制已经为每个TimerTask执行创建了新线程。

2)你能提供更现实的代码吗?您的示例中没有MyThread创建,也没有start()调用。有时bug只是缺少方法调用。