Java 中独立于系统的机器关闭

发布于 2024-12-22 09:21:45 字数 421 浏览 1 评论 0 原文

可能的重复:
使用 Java 关闭计算机

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

Possible Duplicate:
Shutting down a computer using Java

I am making a personal program that will shut down my computer after a certain amount of time or at a certain time/date. However, I am running multiple operating systems and want to do this with one simple Java program. Is there any way to send a system-independent machine shutdown request in Java without any using any external libraries? I know you can use java.awt.Desktop.getDesktop().browse(new URI("shutdown /s")); in Windows, but, again, I want system independence.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不即不离 2024-12-29 09:21:45

不,没有。

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

快乐编码。

No. There is not.

This is outside the scope of the JVM or standard Java class library.

Happy coding.

几味少女 2024-12-29 09:21:45

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

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

Why not use schedulers? All major operating systems supports such feature(cron, at etc). There may be other factors like permission which comes to play in modern windows (windows 7 ), linux etc.

If you want to really use some system call, Try using JNA. That simplifies platform specific access a lot.

自控 2024-12-29 09:21:45

@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 是一个自定义类,它通过上面使用的 #containsIgnoreCase 等方法增强了 String 的功能。 Main.LOG 是我制作和使用的一个日志实用程序。

@robjb gave me the best solution. Though it is a little too inflexible for my tastes, I will be suing it until I run into a problem.

  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);

In the above example, StringPP is a custom class that augments the capabilities of a String with methods such as the above used #containsIgnoreCase. Main.LOG is a logging utility that I made and use.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文