在Java中关机

时间:2013-05-20 13:49:27

标签: java shutdown-hook

我想将系统关闭时间写入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();
        }

    }
  }
}

5 个答案:

答案 0 :(得分:2)

您通常应该避免使用关闭挂钩用于任何有用的目的:它们仅作为清理的最后设施,并且绝对不会获取任何新资源,例如打开文件。绝对不能保证这样的代码在关闭钩子中会成功。

您必须设计一个在关机时执行代码的显式机制。

答案 1 :(得分:0)

代码看起来正确,但您可能遇到文件编写功能

的问题
  • 自己启动线程并查看文件是否已创建并从那里进行调试
  • 同样关闭最后一个块中的pw变量而不是try块

答案 2 :(得分:0)

大多数系统(我知道)会记录系统何时关闭。你是否绝对需要使用Java,你是否绝对需要独立获得时间?如果您只需要系统关闭时间,那么读取系统日志可能会更容易(也更清晰)。

答案 3 :(得分:0)

你是什么意思,它不起作用?我试过,它在我的机器上工作正常。

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

答案 4 :(得分:-1)

我想问题是你的班级会在拦截停机之前结束执行...... 尝试在main方法的末尾添加一个无限循环或一个非常长的Thread.sleep()并重试。在你的情况下,jvm将立即发出声响,你将有执行结束时间!