1

我创建了一个钩子,在表单关闭时执行一些操作:

    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
        public void run() {
            System.out.println("In shutdown hook");
            String dataCrittare = "lgt%";
            Date now=new Date();
            SimpleDateFormat dateformat = new SimpleDateFormat ("yyyyMMdd-HHmm");
            writer.println(dateformat.format(now));
            writer.flush();
            System.out.println("arrived?");
            dispose();
            System.exit(1);

        }
     }, "Shutdown-thread"));

程序似乎退出了,但屏幕上的表单仍然被阻止,我不得不粗暴地关闭它。有谁知道为什么表格不消失?谢谢

4

1 回答 1

0

关闭挂钩在被调用时System.exit()被调用。你不应该System.exit()在你的关闭钩子中调用,因为 JVM已经在终止的路上。在内部addShutdownHook(),对System.exit()死锁的调用Shutdown.exit()(从 调用System.exit())。甚至那里的评论说:

        /* Synchronize on the class object, causing any other thread
         * that attempts to initiate shutdown to stall indefinitely
         */

关闭表单时不会调用您的关闭挂钩!(除非你有一些JFrame.setDefaultCloseOperation(EXIT_ON_CLOSE)左右。)

于 2013-05-07T17:35:49.673 回答