Java中与系统无关的机器关闭

时间:2011-12-23 05:20:28

标签: java platform-independent system-shutdown platform-independence

  

可能重复:
  Shutting down a computer using Java

我正在制作一个个人程序,会在一定时间或特定时间/日期后关闭我的电脑。但是,我正在运行多个操作系统,并希望使用一个简单的Java程序来完成此操作。 有没有办法在Java中发送与系统无关的机器关闭请求而不使用任何外部库?我知道你可以在Windows中使用java.awt.Desktop.getDesktop().browse(new URI("shutdown /s"));,但是,我想要系统独立性

3 个答案:

答案 0 :(得分:1)

没有。没有。

这超出了JVM或标准Java类库的范围。

快乐的编码。

答案 1 :(得分:0)

为什么不使用调度程序?所有主要操作系统都支持此类功能(cron,at等)。可能还有其他因素,如在现代Windows(Windows 7),Linux等中发挥的权限。

如果您想真正使用某些系统调用,请尝试使用JNA。这大大简化了平台特定的访问。

答案 2 :(得分:0)

@robjb给了我最好的解决方案。虽然我的口味有点太不灵活,但我会起诉它直到遇到问题。

  String shutdownCommand;
  StringPP operatingSystem = new StringPP(System.getProperty("os.name"));

  if (operatingSystem.containsIgnoreCase("linux") ||
      operatingSystem.containsIgnoreCase("mac") ||
      operatingSystem.containsIgnoreCase("unix"))
  {
    shutdownCommand = "sudo shutdown -h -t 30";
  }
  else if (operatingSystem.containsIgnoreCase("windows"))
  {
    shutdownCommand = "shutdown /s /d P:0:0 /t 30 /c \"Blue Husky Timer 2 is shutting down your system, as you requested. \n"
        + "You have 30 seconds to save and close programs\"";
  }
  else
  {
    throw new UnsupportedOperationException("Unsupported operating system.");
  }

  try
  {
    Runtime.getRuntime().exec(shutdownCommand);
  }
  catch (Throwable t)
  {
    Main.LOG.logThrowable(t);
  }
  System.exit(0);

在上面的示例中,StringPP是一个自定义类,可以使用上面使用的String等方法来增强#containsIgnoreCase的功能。 Main.LOG是我制作和使用的日志记录实用程序。