这里重新开一个新帖,解决没解决的问题。通过点击,产生一个任务。如果上一个任务没有完成,则结束上一个任务,并创建一个新的任务。任务例子不是循环型的任务,仅仅是打印一个很长的序列.而且我不知道什么时候任务结束,只是点击按钮的时候,如果有正在执行中的任务,则结束掉,并创建一个新任务;如果没有正在执行的任务,则同样创建一个新的任务。现在的思路是利用Timer或者ScheduledExecutorService,但是我都没办法写出来。大家可以参考这个网址:http://topic.csdn.net/u/20120926/09/24ff4c3d-ec7b-42e9-97a6-febfae4afb3e.html希望大家帮助我程序中最后一个问题,先谢谢大家,祝大家中秋,国庆愉快。

解决方案 »

  1.   

    参考网址在这里:http://topic.csdn.net/u/20120926/09/24ff4c3d-ec7b-42e9-97a6-febfae4afb3e.html
      

  2.   


    OK,那么是可能可以的,两种方法:
    1、在读取完一个帖子后,继续读取下一个帖子之前,检查中断标志。
    2、强制close掉读取帖子的那个 Socket和InputStream,流一旦被关系,后续操作就会直接抛出Exception,在catch中检测中断标志,决定是重试还是结束运行。
      

  3.   

    供参考:
    import java.io.*;
    import java.net.*;public class CancelTask {    private volatile static MyWorker currentJob;    public static void main(String[] args) throws Exception {
            CancelTask.startJob();
            Thread.sleep(2000);
            CancelTask.startJob();
        }    /**
         * 该函数负责启动新任务,如果旧任务还没结束,则试图将其终止掉。
         */
        public static synchronized void startJob() {
            if (currentJob != null) {
                currentJob.interrupt();
            }
            currentJob = new MyWorker();
            currentJob.start();
        }    /**
         * 下载网页的工作者
         */
        private static class MyWorker extends Thread {
            private volatile boolean stoped = false;
            private volatile Reader reader;
            
            public void interrupt() {
                System.err.println("\nInterrupt!!!\n");
                this.stoped = true;
                try {
                    reader.close(); // 强制关闭输入流,将会造成Exception
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                super.interrupt();
            }        public void run() {
                try {
                    URL url = new URL("http://www.sina.com.cn/");
                    URLConnection cn = url.openConnection();
                    reader = new InputStreamReader(cn.getInputStream());
                    int c;
                    while ((c = reader.read()) != -1) {
                        System.out.print((char) c);
                        Thread.sleep(1);
                    }
                } catch (Exception e) {
                    if (this.stoped) {
                        // 如果被停止了,说明是主调线程要求终止所导致的异常
                        System.err.println("\nI had been canceled...\n");
                        return;
                    }
                    e.printStackTrace(); // 说明真的是发生异常了,而不是被要求终止的
                    // Maybe retry to download the HTML.
                }        }
        }
    }