操作系统一级的事件,java无法捕捉到!

解决方案 »

  1.   

    这么做看看行不行,先保存所有对象,比如用linklist来保存,发送一个对象从linklist删除一个,那么即使在非正常情况下关闭还是能保留未发送的对象。
      

  2.   

    用linklist保存的话不是程序关了,linklist也没有了么?
      

  3.   

    还有一个方法可以,但是比较复杂,就是使用jdi,也就是Java Debug Interface,原理就如同IDE中的debuger一样,可以跟踪另一个jvm的事件和对象,不过由于非常复杂,所以不建议使用。
      

  4.   

    Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() {
            System.out.println("STOP!");
        }
    });
      

  5.   

    Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() {
            System.out.println("STOP!");
        }
    });这个再重启的时候可以的对吧
      

  6.   


    import java.io.*;
    import java.util.*;
    import java.net.*;
    import java.sql.*;public class Start extends Thread {
      private static boolean bDone = false;
      private static int closePort = 7707;  public void run() {    try {
          while (!bDone) { 
           
           //从数据库里面把数据不断的取出,放到一个发送队列里Que,
           //具体发送细节都有Que的一些方法来完成       1.现在如果程序正常关闭,可以通过什么方法设置bDone=true呢?
           2.如果因为系统重启,是不是在Class 里面加入该方法
    //Runtime.getRuntime().addShutdownHook(new Thread() {
    //    public void run() {
    // System.out.println("STOP!");
    //    }
    //}); 3.如果是系统级的,比如ctrl+ 或者kill -9 pid 是不是就没有任何办法了?      
          }    } catch (Exception e) {e.printStackTrace();}
        System.exit(0);
      }  public static void main(String[] args) throws Exception {
        Start sender = new Start();
        sender.start();
      }
    }
      

  7.   

    回答: 1,可以在另外的线程里面关闭。
           2,Runtime.getRuntime().addShutdownHook 只在虚拟机正常退出的时候才能起作用。
           3,我在上边的回复中已经答过了。