+ -
当前位置:首页 → 问答吧 → 请问使用timer不断去更新zul中的listbox

请问使用timer不断去更新zul中的listbox

时间:2010-11-03

来源:互联网

原本是用server push的方式来更新页面,但是过十几分钟开始发现网页变慢了,用windows的工作管理员发现IE的记忆体用量一直不断升高,查程式确认资源都有释放掉,后来用listbox加上timer来做测试,先clear listbox child之后再appendchild 元件,大约每五秒更新10列资料,发现IE记忆体还是会一直增加,请问有什么解决方式吗?用grid的setModel也会

作者: ckh0719   发布时间: 2010-11-03

有可以重演的example zul 吗 @.@

作者: Tony1223   发布时间: 2010-11-04

程式码太多,贴关键的部分:
zul grid部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
<grid id="eventgrid"> <columns> <column label="主机" width="100px" align="center"/> <column label="系统名称" width="100px" align="center"/> <column label="事件代号" width="80px" align="center"/> <column label="事件简述" width="250px" align="center"/> <column label="发生时间" width="80px" align="center"/> <column label="通知次数" width="60px" align="center"/> <column label="处理情形" width="100px" align="center"/> <column label="处理说明" width="60px" align="center"/> </columns> </grid>


*****************************************
apply class doAfterCompose 之后启动timer:
1
2
3
4
5
LiveEventMonitor lem=new LiveEventMonitor();
     lem.setPage(eventgrid.getPage());
     lem.setDelay(5000);
     lem.setRepeats(true);
     lem.start();

*****************************************
timer class:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class LiveEventMonitor extends Timer{
  public void onTimer(Event evt) {     Grid eventgrid = (Grid) getFellow("eventgrid");
   result=dao.find();
    Vector v = new Vector();
    if(result!=null){          
      for(int i=0;i<result.size();i++){
        LiveEvent bean=(LiveEvent)result.get(i);  
        Vector v1=new Vector();
        v1.add(bean);
        v.add(v1);
   }
      
      if (eventgrid.getRowRenderer() == null) {
        eventgrid.setRowRenderer( new LiveEventRowRenderer());
      }
 
      if (eventgrid.getModel() == null) {
        eventgrid.setModel(new ListModelList(v));
      } else {
        System.out.println("lml.clear..........");
        ListModelList lml = (ListModelList) eventgrid.getModel();
        lml.clear();
        lml.addAll(v);
      }
        
      
         }
  }
  
}

*****************************************

RowRenderer class:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class LiveEventRowRenderer implements RowRenderer{
  
  public void render(Row row, Object data) throws Exception {
//test
    Vector _data = (Vector)data;
 
    for (Enumeration e = _data.elements(); e.hasMoreElements();) {      
      LiveEvent bean = (LiveEvent) e.nextElement();
       new Label(bean.getEventSn()).setParent(row);         new Label(bean.getEventSn()).setParent(row);         new Label(bean.getEventMsg()).setParent(row);
        new Label(bean.getEventSn()).setParent(row);         new Label(bean.getHostName()).setParent(row);
        new Label(bean.getEventSn()).setParent(row);               }
       }
 
}

作者: ckh0719   发布时间: 2010-11-04

你好,

我测了这个问题,我觉得这应该是个bug,
所以我 post 了一个 bug 在 zk trakcer 上

作者: Tony1223   发布时间: 2010-11-05

刚刚试过从zk3换到zk5,不过server push跟Jasperreport在zk5版本的使用上好像有所限制,而这两个我有用到,加上很多原本拉好的画面全部走位,还有一些功能会出现警告讯息,看来改写是在所难免,我在想想其他办法,谢谢

作者: ckh0719   发布时间: 2010-11-05

http://sourceforge.net/tracker/?func=detail&atid=785191&aid=3103470&group_id=152762

Bug updated.

实作够短的 Idgenerator 可以解决这个问题

作者: Tony1223   发布时间: 2010-12-23

热门下载

更多