Java 管理器中字段的延迟显示(blackberry)

Java 管理器中字段的延迟显示(blackberry),java,blackberry,Java,Blackberry,我有一个向管理器添加字段的循环,我试图延迟在屏幕上绘制每个字段之间的时间。我一直在尝试下面的代码,但当所有字段都添加到代码中时,它只会绘制管理器。 这可能吗 manager.add(field); manager.invalidate();//force a repaint of the manager Thread.sleep(1000); 谢谢,无效不一定强制绘制,它只是说在下一次绘制时,需要重新绘制字段(或管理器)。这是一个微妙的区别,但它可能会造成混乱。您可能想尝试调用Screen.d

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

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

谢谢,

无效不一定强制绘制,它只是说在下一次绘制时,需要重新绘制字段(或管理器)。这是一个微妙的区别,但它可能会造成混乱。您可能想尝试调用
Screen.doPaint()
,这将强制整个屏幕重新绘制。此外,将sleep()放在事件线程中也不会有帮助,因为绘制也是在同一线程上完成的

如果您试图在第二个延迟时间内按顺序向管理器添加字段,则应将此逻辑放入其自己的线程中,并在调用Manager.add(field)时执行
synchronized(UiApplication.getEventLock()){//add Fields}
。然后您可以调用
线程。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();
}
受保护的void addDelayedFields(){
线程t=新线程(新的可运行线程(){
公开募捐{

for(inti=0;iThanks)是一个很好的答案。为什么要在这里同步-synchronized(UiApplication.getEventLock()){?