首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • j2se中SWT高手请进!关于停止按钮的实现 [已结贴,结贴人:zjqwll]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zjqwll
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-22 13:27:15 楼主
    在SWT开发中,我开发一个程序,里面有2个按钮,一个搜索,
    一个是停止,搜索按钮事件中使用了一个while循环进行搜索。
    我想实现的效果是:点击停止按钮的就终止while循环,然后把
    搜索结果显示在另外一个窗口。实际上我已经实现搜索和显示的
    功能,但是在点击停止的时候就会出现程序无响应,即程序死掉
    的情况,也就是会所我无法实现停止这个功能。

    protected void createContents() {
    shell = new Shell();
    shell.setSize(500, 375);
    shell.setText("程序测试");

    final Button button = new Button(shell, SWT.NONE);
    button.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(final SelectionEvent e) {]
    while(...){
    ...//这里是循环体
    }
    }
    });
    button.setText("搜索");
    button.setBounds(156, 144, 58, 23);

    final Button button_1 = new Button(shell, SWT.NONE);
    button_1.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(final SelectionEvent e) {]
      //这里需要写停止的事件程序代码
    }
    });
    button_1.setText("停止");
    button_1.setBounds(313, 130, 44, 23);
    //
    }
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ilysony
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 13:29:271楼 得分:0
    没有用过SWT ,,路过帮顶
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zjqwll
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 13:57:092楼 得分:0
    有没有高手啊 ,在线等。。。。55555~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lude8880
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 14:00:423楼 得分:0
    这样要用到多线程
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • thinkisbest
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 14:57:264楼 得分:0
    对.是要用到多线程.当点击停止的时候,应该阻塞搜索的那个线程.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • SARA520
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 15:00:155楼 得分:0
    很明显

    多线程
    一个线程进行搜索
    另一个线程监听是否按下停止按钮
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zjqwll
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 12:43:416楼 得分:0
    引用 5 楼 SARA520 的回复:
    很明显

    多线程
    一个线程进行搜索
    另一个线程监听是否按下停止按钮


    具体该怎么做呢,能给个例子吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zjqwll
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 12:44:457楼 得分:0
    SWT线程怎么搞啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • AWUSOFT
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 19:40:128楼 得分:0
    不需要线程啊.你多加一个变量啊.如果这个变量是true+其它条件才继续循环.你另一个按钮就用来改变这个变量 的值,让它为false嘛.但是注意第一次使用的时候要让它还是true哦,要不然你就搜索不了.思路大概这样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zjqwll
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 12:10:489楼 得分:0
    引用 8 楼 AWUSOFT 的回复:
    不需要线程啊.你多加一个变量啊.如果这个变量是true+其它条件才继续循环.你另一个按钮就用来改变这个变量 的值,让它为false嘛.但是注意第一次使用的时候要让它还是true哦,要不然你就搜索不了.思路大概这样


    这样我做了的啊 ,是不行的啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zjqwll
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 12:14:0510楼 得分:0
    问题是停止按钮都点不了啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BeckhamXiao
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 22:07:3811楼 得分:2
    用多线程,如果是不停的while那个close按钮没有机会响应直到while退出,你可以加点调试代码验证一下。
    所以你要一个按钮的监听器启动一个新线程搜索,另外停止的监听器负责终止那个线程
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zjqwll
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 16:08:2512楼 得分:0
    引用 11 楼 BeckhamXiao 的回复:
    用多线程,如果是不停的while那个close按钮没有机会响应直到while退出,你可以加点调试代码验证一下。
    所以你要一个按钮的监听器启动一个新线程搜索,另外停止的监听器负责终止那个线程

    楼上的大虾可以具体点吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • leaderbird
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 21:48:3513楼 得分:5
    嗯.上面有人提到用一个变量来判断是否需要while退出.这个应该比较容易实现.但还是觉得有点不对.java语句是从上到下执行的等到一个动作去实现修改变量的值的时候其实整个while已完成了;所以估计还是得用多线程来实现.这个应该跟SWT没关的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • deepbrain
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 21:58:3614楼 得分:8
    搜索

    final Button button = new Button(shell, SWT.NONE);
    button.addSelectionListener(new SelectionAdapter() {
    public void widgetSelected(final SelectionEvent e) {]
      Runnable search=new Runnable() {
          public void run() {
              while(!finished){
              搜索的过程....
              }
          }
      }
      new Thread(search).start();
    }
    });
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ysljf
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 22:45:1915楼 得分:5
    肯定要多线程。。。。。。。
    可以用TheadGroup..
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zjqwll
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-26 17:29:3816楼 得分:0
    引用 13 楼 leaderbird 的回复:
    嗯.上面有人提到用一个变量来判断是否需要while退出.这个应该比较容易实现.但还是觉得有点不对.java语句是从上到下执行的等到一个动作去实现修改变量的值的时候其实整个while已完成了;所以估计还是得用多线程来实现.这个应该跟SWT没关的


    恩,我也这样认为的
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved