-2

システムのシャットダウン時刻をtxtファイルに書き込みたい。shutdownhook スレッドを使用しています。

スレッドのrunメソッドにファイル書き込みの仕組みを書きました。しかし、それは機能していません..これは私のコードです..

public class JVMShutdownHookTest {
  public static void main(String[] args) {
    JVMShutdownHook jvmShutdownHook = new JVMShutdownHook();
    Runtime.getRuntime().addShutdownHook(jvmShutdownHook);
    System.out.println("JVM Shutdown Hook Registered.");
    System.out.println("Pre exit.");


  }

  private static class JVMShutdownHook extends Thread {
    public void run() {
      System.out.println("JVM Shutdown Hook: Thread initiated.");

        File file = new File("C:\\Users\\karthi\\Desktop\\Shutdown.txt");


        try {
            //FileWriter fw = new FileWriter(file, true);
            PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));
            pw.println("Shutdown Time is ======= " + Calendar.getInstance().getTime());
            pw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
  }
}
4

5 に答える 5

2

一般に、シャットダウン フックを有用な目的で使用することは控えてください。シャットダウン フックはクリーンアップの最後の手段としてのみ存在し、ファイルを開くなどの新しいリソースを取得することは絶対にありません。このようなコードがシャットダウン フックで成功するという保証はまったくありません。

シャットダウン時にコードを実行する明示的なメカニズムを考案する必要があります。

于 2013-05-20T13:56:47.830 に答える
0

コードは正しいように見えますが、ファイル書き込み機能に問題がある可能性があります

  • 自分でスレッドを起動し、ファイルが作成されているかどうかを確認し、そこからデバッグします
  • また、try ブロックではなく、最終ブロックで pw 変数を閉じます
于 2013-05-20T13:57:52.770 に答える
0

ほとんどのシステム (私が知っている) は、システムがシャットダウンされたときのログを保持しています。これには絶対に Java を使用する必要がありますか? また、独立して時間を確保する必要がありますか? システムのシャットダウン時間だけが必要な場合は、システム ログを読む方が簡単 (かつクリーン) な場合があります。

于 2013-05-20T14:05:41.597 に答える
-1

問題は、シャットダウンをインターセプトする前にクラスが実行を終了することだと思います...メインメソッドの最後に無限ループまたは非常に長い Thread.sleep() を追加して、再試行してください。あなたの場合、jvmはすぐにシャウトダウンし、実行終了時刻になります!

于 2013-05-20T13:56:00.983 に答える