Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在瓦丁的环路中等待?_Java_Image_Time_Vaadin_Sleep - Fatal编程技术网

Java 如何在瓦丁的环路中等待?

Java 如何在瓦丁的环路中等待?,java,image,time,vaadin,sleep,Java,Image,Time,Vaadin,Sleep,我试图在一个页面上以时间间隔显示一系列照片。在countinos while循环中,我得到: while(true){ if (zmienna == fa.length) zmienna = 0; Image obrazek = new Image("",pliki[zmienna]); layout.replaceComponent(staryObrazek, obrazek); obrazek.requestRepaint

我试图在一个页面上以时间间隔显示一系列照片。在countinos while循环中,我得到:

while(true){

        if (zmienna == fa.length) zmienna = 0; 
        Image obrazek = new Image("",pliki[zmienna]);

        layout.replaceComponent(staryObrazek, obrazek);
        obrazek.requestRepaint();
        staryObrazek = obrazek;
        zmienna++;
        try {
            Thread.sleep(2000) ;
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        }

它只显示等待图标,dispaying mwthod无需循环即可正常工作。有人知道我应该如何处理这个问题吗

在所有现代UI系统中,您不必挂起主线程,而是使用后台线程来更新UI。否则会阻塞整个UI

在Vaadin 7中,您可以启用服务器推送,然后使用后台线程每2秒更改一次映像

瓦丁的书中描述了启用推送

您的代码可能如下所示:

public class PushyUI extends UI {

@Override
protected void init(VaadinRequest request) {
    // Set first component/image
    setContent(chart);

    // Start the update thread
    new ImgUpdThread().start();
}

class ImgUpdThread extends Thread {

    @Override
    public void run() 
    {    
            // Update the data for a while
            while (count < 100) {
                Thread.sleep(1000);

                access(new Runnable() {
                    @Override
                    public void run() {
                        //update the UI as in your code above
                    }
                });
            }
   }
公共类PushyUI扩展用户界面{
@凌驾
受保护的void init(VaadinRequest请求){
//设置第一个组件/图像
设置内容(图表);
//启动更新线程
新ImgUpdThread().start();
}
类ImgUpdThread扩展线程{
@凌驾
公开募捐
{    
//暂时更新数据
同时(计数<100){
睡眠(1000);
访问权限(新的可运行(){
@凌驾
公开募捐{
//按照上面的代码更新UI
}
});
}
}

使用access(…)方法同步对UI元素的访问是很重要的。

对我来说,在用户执行其他操作以强制刷新(例如单击按钮)之前,不会看到所做的UI更改。有什么想法吗?@AndyW您启用了任何服务器推送方法吗?没有,我没有。只是添加了“@push”在我的MainView类之上,它现在可以工作了!您可以使用
getUI().setPollInterval()