延迟显示经理(黑莓)中的字段

时间:2011-05-20 10:14:35

标签: java blackberry

我有一个循环向经理添加字段,我试图延迟每个字段绘制到屏幕之间的时间。我一直在尝试下面的代码,但它只是在所有字段都添加到它时绘制管理器。 这可能吗?

manager.add(field);
manager.invalidate();//force a repaint of the manager
Thread.sleep(1000);

由于

1 个答案:

答案 0 :(得分:2)

Invalidate不一定强制绘制,它只是说在下一个绘制时需要重绘Field(或你的情况下的Manager)。这是一个微妙的差异,但它可能导致混乱。您可能想要尝试的是调用Screen.doPaint(),这将强制整个屏幕重绘。另外,将sleep()放在Event Thread中也无济于事,因为绘制也是在同一个Thread上完成的。

如果您尝试在第二次延迟时将字段顺序添加到Manager,则应将此逻辑放在自己的线程中,并在调用manager.add(字段)时执行synchronized(UiApplication.getEventLock()){//add fields}。然后,您可以致电Thread.sleep(1000)以正确延迟显示。此外,正如一些添加的信息一样,调用add()本身会导致invalidate()调用,因此您无需添加它。这是添加

的第二个延迟的简单示例
protected void addDelayedFields() {
    Thread t = new Thread( new Runnable() {
        public void run() {
            for(int i=0;i<SOME_LIMIT;i++) {
                synchronized(UiApplication.getEventLock()) {
                    manager.add(new LabelField(i.toString());
                }
                try{
                    Thread.sleep(1000);
                }
                catch(Exception e){ }
            }
        }
    });
    t.start();
}

绘画应该在add()之后进行,但如果没有,你也可以调用yourScreen.doPaint()