MyRcp技术论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用新浪微博连接

一步搞定

搜索
查看: 184|回复: 0

[问题求助] 有个问题,困扰俺很久啦。。。 [复制链接]

Rank: 3Rank: 3Rank: 3

  • TA的每日心情
    慵懒
    2011-11-24 14:36:12
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    升级  9.33%

    积分
    228
    威望
    0
    金币
    189 个
    贡献
    20
    帖子
    19
    精华
    0
    发表于 2011-9-19 15:22:02 |显示全部楼层
    开发工具:Eclipse 版本:
    数据库: 版本:
    服务器: 版本:
    本帖最后由 vucko 于 2011-9-19 16:00 编辑

    我用swt写的程序,现在点击窗口一个按键后,向远程索取数据,有时候数据较多需要等待一定的时间,这个时间整个界面都会卡死在那,该怎么实现点击后出现一个进度对话框,傻瓜进度条也行,在数据返回后自动关闭呢?你们一般是怎么做这个流程的?
    最好给我个例子看下~

    我简单实现是这样的,

    1. /**
    2. *
    3. */
    4. package nmsv11.Actions;
    5. import nmsv11.FullNodeMenu;
    6. import nmsv11.Login;
    7. import nmsv11.MyClient;
    8. import nmsv11.NmsGui;
    9. import nmsv11.Node;
    10. import org.eclipse.core.runtime.IProgressMonitor;
    11. import org.eclipse.jface.action.Action;
    12. import org.eclipse.jface.dialogs.MessageDialog;
    13. import org.eclipse.jface.dialogs.ProgressMonitorDialog;
    14. import org.eclipse.jface.operation.IRunnableWithProgress;
    15. /**
    16. * Show node info
    17. *
    18. * @author Administrator 2010.09.10
    19. */
    20. public class ShowNodeInfoAction extends Action {
    21. private Node selected;
    22. public NmsGui window;
    23. protected boolean stopFlag;
    24. ptdnnms.model.Node node;
    25. String err;
    26. public ShowNodeInfoAction(Node node) {
    27.   setText("显示节点信息");
    28.   setHoverImageDescriptor(FullNodeMenu.getImageDesc("node_info.png"));
    29.   this.selected = node;
    30. }
    31. @Override
    32. public void run() {
    33.   try {
    34.    final MyClient client = (MyClient) Login.ctx.getBean("myNodeServiceClient");
    35.    final int nodeId = selected.getId();
    36.    stopFlag = false;// 每次都设初值为false
    37.    new Thread() {// 把后台任务放到一个新开线程里执行
    38.     public void run() {
    39.      try {
    40.       Thread.sleep(200);
    41.       node = client.getNodeService().uploadNodeParams(nodeId);// showNodeInfo(nodeId);
    42.      } catch (Exception e) {
    43.       System.out.println(e);
    44.       err = e.toString();
    45.      }
    46.      stopFlag = true;
    47.     }
    48.    }.start();
    49.    showProgressDialog("获取节点" + selected.getDispName() + "信息......");
    50.    // ptdnnms.model.Node node = client.showNodeInfo(nodeId);
    51.    if (node != null) {
    52.     MessageDialog.openInformation(
    53.       null,
    54.       "节点#" + node.getId() + "(" + node.getAddr() + ")系统信息",
    55.       "节点id: " + node.getId() + "\n" + "节点物理地址: " + node.getAddr() + "\n" + "节点创建时间: "
    56.         + node.getCreatetime() + "\n" + "节点系统对象id: " + node.getSysobjectid() + "\n" + "节点系统名: "
    57.         + node.getSysname() + "\n" + "节点启动时间: " + node.getSysuptime() + "\n" + "节点描述: "
    58.         + node.getSysdescr() + "\n" + "节点位置: " + node.getSyslocation() + "\n" + "节点接触: "
    59.         + node.getSyscontact() + "\n" + "节点别名: " + node.getNodealias() + "\n" + "节点状态: "
    60.         + node.getStatus());
    61.    } else {
    62.     MessageDialog.openInformation(null, "确认", "获取节点“" + nodeId + "”信息失败!\n" + err);
    63.    }
    64.   } catch (Exception e) {
    65.    e.printStackTrace();
    66.   }
    67. }
    68. public void showProgressDialog(final String tips) {
    69.   IRunnableWithProgress runnable = new IRunnableWithProgress() {
    70.    public void run(IProgressMonitor monitor) {
    71.     int i = 0;
    72.     stopFlag = false;
    73.     monitor.beginTask(tips, 10);
    74.     while (true) {
    75.      // 监听是否单击了进度框的“取消”按钮,stopFlag则是监听后台任务是否停止
    76.      if (monitor.isCanceled() || stopFlag) {
    77.       stopFlag = true; // 单击了“取消”按钮要设标志位为停止,好通知后台任务中断执行
    78.       break;// 中断处理
    79.      }
    80.      // i到30后清零。并将进度条重新来过
    81.      if ((++i) == 10) {
    82.       i = 0;
    83.       monitor.beginTask(tips, 10);
    84.      }
    85.      // 进度条每前进一步体息一会,不用太长或太短,时间可任意设。
    86.      try {
    87.       Thread.sleep(100);
    88.      } catch (Throwable t) {
    89.      }
    90.      monitor.worked(1);// 进度条前进一步
    91.     }
    92.     monitor.done();// 进度条前进到完成
    93.    }
    94.   };
    95.   try {
    96.    new ProgressMonitorDialog(null).run(true, true, runnable);
    97.   } catch (Exception e) {
    98.    e.printStackTrace();
    99.   }
    100. }
    101. }
    复制代码

    附件: 你需要登录才可以下载或查看附件。没有帐号?注册
    您需要登录后才可以回帖 登录 | 注册

    无觅相关文章插件

    手机版|MyRcp

    GMT+8, 2012-2-23 14:07 , Processed in 1.836882 second(s), 20 queries .

    Powered by Discuz! X2

    © 2001-2011 Comsenz Inc.

    回顶部