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 に答える