Java 如何在瓦丁的环路中等待?
我试图在一个页面上以时间间隔显示一系列照片。在countinos while循环中,我得到: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
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()
。