急急急!!!急急急!!!急急急!!!有谁知道这个功能怎么实现,帮忙解答出来的 200 分全送了!!一个jsp页面上有2个按钮   一个实行  一个中止  点实行按钮用ajax提交到后台 对数据库中指定表做csv文件出力操作(操作速度非常快,最慢不超过3秒钟),操作完成返回提示信息;点中止按钮停止后台的程序运行,返回一个提示信息,  用java怎么实现,只剩 200 分了,知道的 200 分全送!!!!谢谢!!!!

解决方案 »

  1.   

    我知道用swingworker来处理后台程序的话可以用cancel方法来停止,ajax嘛,估计原理都差不多,反正都是异步提交只是具体怎么做我不知道鸟,我想也应该有api吧。
      

  2.   

    就是java gui的东西被2个按钮,“提交”“终止”那就做两个按钮的方法被,google一下,也不少啊
      

  3.   

    不是gui的  是在jsp页面上啊, 不可以的   郁闷死  要是gui就好了  直接用事件监听就ok了  可是在jsp页面上怎么弄阿
      

  4.   

    关键在这里
    定表做csv文件
    你怎么处理,都得一个数据一个数据的弄,至少是一行一行的
    类设置一个
    boolean forceStop = false;
    的属性,
    在每个数据处理的循环里,都判断是否要强行停止,如果是,则终止未完成的工作。
    第二个stop按钮要调用程序,设置这个forceStop属性提示,处理的类,也就是包含forceStop的类放在session里面,这样stop操作可以最快的找到正在运行的类,并设置forceStop属性start.jsp
    MyReport o = new MyReport();
    session.setAttribute("REPORT",o);
    o.do();stop.jsp
    MyReport o = (MyReport)session.getAttribute("REPORT");
    if(o!=null){
      o.setForceStop(true);
    }
      

  5.   

    提示,如果你想反悔的可能性比较大,为何不在处理完成前,强制的sleep一段时间呢,用来判断是否终止。
    虽然有点流氓做法,但也许真的有用,因为你的处理速度太快了(3秒),我想那个想后悔的人还没来的及按下STOP按钮就已经完成了大致做法如下
    int times = 5;
    while(times>0){
      if(forceStop){
        // 强行终止的代码
      }
      try{
        Thread.sleep(1000); // 等待1秒钟。 这个你可以自己根据实际情况修改。
      }catch(Exception ex){}
      times--;
    }
      

  6.   

    既然是JSP页面,那在页面里面使用JS来完成AJAX操作不就行了吗?至于你说的CSV,sorry.我不会啦,如果是用数据库查的报表之类的,直接弹出一个新页面,用户看完后再关闭就行了,也不会影响操作
      

  7.   

    你这个问题的关键在于,怎样让STOP按钮的浏览器事件,尽快地通知正在运行的某个操作。Ajax肯定用的。
    应用那面,我认为需要强制休眠sleep还是需要的,否则绝大多数情况下不会有停止的了。因为人的反应达不到那么快!
    延迟至少得比人的反应速度长才行吧!!!
      

  8.   

    同意LS的.
    设一静态BOOLEAN变量,然后STOP事件改变值,实行事件时间判断.如果业务表中数据量不大就每一条读出然后判断;如果业务量大的话就分次读出再判断.三秒只要数据量不是太大应该没有问题(尽量控制访问DB次数).
      

  9.   

    你还是没有认识到问题的关键
    你这个问题的关键在于,怎样让STOP按钮的浏览器事件,尽快地通知正在运行的某个操作按照你的说法,你最好在0.0001秒完成任务才好。那stop还有意义吗?到底是处理速度重要,还是Stop重要,我想你要中间平衡一下。平衡点就是既不让客户感到处理慢,同时又给客户反悔的机会。这个点怎么调我已经给你代码了,怎么设置就看你具体的应用了。1秒怎样?2秒呢?3秒呢? 总有一个平衡点吧!!!
      

  10.   

    确定客户需求:
    1.csv文件出力操作在三秒以内,对吧?
    2.STOP是要能终止执行,不想要csv文件出力,对吧?
    如果只有上面那两条那么你就在CSV出力之前加上一个判断就行了,完全没有必要做到线程控制.
      

  11.   

    发表于:2008-01-29 10:32:175楼 得分:0 
    关键在这里 
    定表做csv文件 
    你怎么处理,都得一个数据一个数据的弄,至少是一行一行的 
    类设置一个 
    boolean   forceStop   =   false; 
    的属性, 
    在每个数据处理的循环里,都判断是否要强行停止,如果是,则终止未完成的工作。 
    第二个stop按钮要调用程序,设置这个forceStop属性 提示,处理的类,也就是包含forceStop的类放在session里面,这样stop操作可以最快的找到正在运行的类,并设置forceStop属性 start.jsp Java codeMyReport o = new MyReport();
    session.setAttribute("REPORT",o);
    o.do();stop.jsp Java codeMyReport o = (MyReport)session.getAttribute("REPORT");
    if(o!=null){
      o.setForceStop(true);

    你能发个全点的好用的源代码么?
    我不知道你是怎么发送请求的,在点实行按钮的时候的请求中并没有你的那个session  所以在你点实行按钮执行的代码中无法取到点中止按钮时候建立的session
      

  12.   

    关于session, 你看到你在csdn的操作,哪里有session了,不就是一个连接吗?session在哪里????session是通过cookie传递sessionId到服务器的,你客户端的每一个请求,无论是
    1 手工输入地址
    2 点击连接
    3 提交标单
    4 Ajax模拟的连接和提交这些都会把cookie里面的jsessionid 传到服务器。服务器根据这个id 来区分你的状态这就是session
      

  13.   

    大哥   你看好了   那个session 是谁说的  不是我说的阿  你要是能做出来就发点源码上来  别光说   你能整出来这些分都给你  你看行不?
      

  14.   

    OVER 不再回复,越说越糊涂!哈哈!
      

  15.   

    有一个办法,一个请求过来,你放到一个队列里面,然后立刻返回“你前面还有N多人,是否要终止?”
    点击“stop”就把这个请求从队列里面删除,如果队列里面没有那就是已经执行完或者当时正在执行
    zk1125你看这样如何?
      

  16.   

    diamond_fish   能发点源码上来么?