我在从Timer执行方法时收到了非常有问题的异常

时间:2012-01-15 22:51:57

标签: blackberry

当我从主屏幕的构造函数运行我的方法时,它可以工作,但如果在计时器中调用,那么我会收到错误。

这是我的方法:

public void buildDesc(){


    try {


        JSONObject event = array.getJSONObject(currentPage);
        String title = event.getString("title");

        String by = event.getString("by");
        String by_name = event.getString("by_name");
        String summary = event.getString("summary");
        int nid = event.getInt("nid");


    vfm.add(new LabelField(title));
        System.out.println("The Title:"+title);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}

计时器:

timer = new Timer();//Create the timer to loop the events every 5 seconds
        timer.scheduleAtFixedRate(new TimerTask(){
            public void run() {
                currentPage++;
                if(currentPage > 3){
                    currentPage = 0;    
                }
                System.out.println("Page Position:"+pagePosition(currentPage+1));
                gallery.setHorizontalScroll(pagePosition(currentPage));

                buildDesc();

            }
        }, 0, 10000);

我读了一个Android问题,说如果没有在UIThread上,我可能无法对UI进行更改?

1 个答案:

答案 0 :(得分:1)

我认为你的预感是正确的,在黑莓手机中你不应该对Ui线程做任何工作。我想Timer线程因为它的行为而被终止,这就是你得到IllegalStateException的原因。可以找到UI线程的快速指南here

尝试:

timer = new Timer();//Create the timer to loop the events every 5 seconds
timer.scheduleAtFixedRate(new TimerTask(){
    public void run() {
        currentPage++;
        if(currentPage > 3){
            currentPage = 0;    
        }
        System.out.println("Page Position:"+pagePosition(currentPage+1));

        synchronized(UiApplication.getUiApplication().getEventLock())) {  
            // UI Code here
            gallery.setHorizontalScroll(pagePosition(currentPage));

        buildDesc();
        } 
    }
}, 0, 10000);

注意:以上是未经测试的。