wsmnbzbraw312 2010-12-31 10:36
浏览 315
已采纳

SWT执行长时间逻辑任务假死

SWT界面上有个开始按钮和结束按钮,我想实现点击这个开始按钮后,去定期执行一个很费时的查询任务,

查询的返回结果要增加到一个树节点上,现在主要的问题就是,

我点击开始按钮后,在执行查询任务的过程中,界面没响应了,也不能点结束按钮,必须要等到查询任务完成后界面才能响应

下面是开始按钮监听代码,那个timer是成员变量,period是一个Long型的时长

在网上查了几个小时了,试了好多方法也没解决,有这方面经验的麻烦指点下,谢谢。


private Timer timer;

......

startButton.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {

            statusLabel.setText("正在获取信息...");

            if (timer != null) {
                timer.cancel();
            }
            timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    display.asyncExec(new Runnable() {
                        public void run() {
                            discovery();
                        }
                    });
                }
            }, 0, period);
        }
    });

......

public void discovery() {
    final SnmpDiscovery discovery = new SnmpDiscovery();
    resultMap = discovery.discovery(resultMap);

    if (null != resultMap) {
        for (Iterator it = resultMap.entrySet().iterator(); it.hasNext();) {
            Map.Entry entry = (Map.Entry) it.next();
            // 这里有访问到SWT UI线程中的变量
            TreeItem item = new TreeItem(deviceTree, SWT.NONE);
            item.setText(String.valueOf(entry.getKey()));
        }
    }
}

  • 写回答

1条回答 默认 最新

  • beneo 2010-12-31 10:44
    关注
    1. 不要用time,用ScheduledThreadPoolExecutor
    2. 还一种思路,既然这个时间很长,异步去搜索数据,就用一个变量来保存结果。搜索数据完,结果出来了,然后通知界面,界面得到通知,用户点击去看结果
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向