博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

MANIAC

逝去的时光,奔腾的流水,放浪的生涯,燃烧的梦想,繁繁茫茫的人海,漂泊流浪的我...
  maniac.cublog.cn

关于作者
小时候一直以为我跟别人不一样,原来长大以后,每个人都一样.要么忙着活,要么忙着死,只有这两种选择.

QQ    396002399
MSN   00ahui@gmail.com
EMAIL 00ahui@gmail.com
|| << >> ||
我的分类


如何在Java程序中处理Ctrl+C
在Java控制台程序中,特别是多线程的Java控制台程序中,中途中断程序可能产生不可预料的结果,比如文件描述符没有关闭,造成文件格式的破坏,或者远程连接没有关闭,造成远程服务器资源的浪费,等等。所以在程序中添加Ctrl+C处理机制很有必要,下面根据一个例子作一下介绍如何处理:

在程序中调用RunRuntime.getRuntime().addShutdownHook(Thread handler)就可以添加一个程序退出处理线程handler,一旦发生程序退出,线程handler开始运行。这样就可以在handler的run函数中进行资源的释放,文件描述符的关闭等操作。下面是一个简单的例子:

JAVA CODE:
----------------------------------
/**
 * This Class introduced how to handle Ctrl+C in your program <BR>
 * You can close file descriptor, close remote connection , release memory and
 * so on when Ctrl C happens.
 *
 * @author Ahui Wang
 *
 */
public class CtrlC implements Runnable {

    private boolean bExit = false;

    private class ExitHandler extends Thread {
        public ExitHandler() {
            super("Exit Handler");
        }

        public void run() {
            System.out.println("Set exit");
            bExit = true;
        }
    }

    public CtrlC() {
        Runtime.getRuntime().addShutdownHook(new ExitHandler());
    }

    public void run() {
        while (!bExit) {
            // Do some thing
        }
        System.out.println("Exit OK");
    }

    public static void main(String[] args) throws InterruptedException {
        CtrlC ctrlc = new CtrlC();
        Thread t = new Thread(ctrlc);
        t.setName("Ctrl C Thread");
        t.run();
        t.join();
    }
}

--------------------------------
END

上面程序中有一个main线程,一个主线程,一个Ctrl+C处理线程,当发生Ctrl+C时,处理线程设置退出标志,主线程判断到退出标志后自动退出。

 TAG Java 退出 Ctrl
发表于: 2007-09-22,修改于: 2007-10-06 03:12,已浏览640次,有评论2条 推荐 投诉


网友评论
网友: 本站网友 时间:2007-10-02 19:09:18 IP地址:219.238.65.★
谢谢了,正需要

网友: nkmaniac 时间:2007-10-26 20:47:43 IP地址:60.28.145.★
客气, 很高兴你能用的着

 发表评论