-2

I want to write the system shutdown time to a txt file. I am using the shutdownhook thread.

I have written the file writing mechanism in the run method of the thread. But it is not working.. This is my code..

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

大多数系统(据我所知)都会记录系统何时关闭。您是否绝对需要为此使用 Java,并且您是否绝对需要独立获得时间?如果您只需要系统关闭时间,那么阅读系统日志可能会更容易(也更干净)。

于 2013-05-20T14:05:41.597 回答
0

代码看起来正确,但文件写入功能可能有问题

  • 自己启动线程并查看文件是否已创建并从那里调试
  • 还要在 final 块中而不是在 try 块中关闭 pw 变量
于 2013-05-20T13:57:52.770 回答
0

你的意思是它不起作用?我试过了,它在我的机器上运行良好。

您是否收到了一些错误,文件未创建,或者其内容与您预期的不同?

于 2013-05-20T15:34:57.117 回答
-1

我想问题是你的类将在拦截 Shutdown 之前结束执行......尝试在你的 main 方法的末尾添加一个无限循环或一个非常长的 Thread.sleep() 并重试。在您的情况下,jvm 将立即大喊大叫,您将拥有执行结束时间!

于 2013-05-20T13:56:00.983 回答