可能重复:
使用 Java 关闭计算机
我正在制作一个个人程序,该程序将在一定时间或特定时间/日期后关闭我的计算机。但是,我正在运行多个操作系统,并希望使用一个简单的 Java 程序来完成此操作。有没有办法在不使用任何外部库的情况下在 Java 中发送与系统无关的机器关闭请求?我知道你可以java.awt.Desktop.getDesktop().browse(new URI("shutdown /s"));
在 Windows 中使用,但是,我想要系统独立。
可能重复:
使用 Java 关闭计算机
我正在制作一个个人程序,该程序将在一定时间或特定时间/日期后关闭我的计算机。但是,我正在运行多个操作系统,并希望使用一个简单的 Java 程序来完成此操作。有没有办法在不使用任何外部库的情况下在 Java 中发送与系统无关的机器关闭请求?我知道你可以java.awt.Desktop.getDesktop().browse(new URI("shutdown /s"));
在 Windows 中使用,但是,我想要系统独立。
不,那里没有。
这超出了 JVM 或标准 Java 类库的范围。
快乐编码。
为什么不使用调度程序?所有主要操作系统都支持此类功能(cron、at 等)。可能还有其他因素,例如在现代 Windows(Windows 7)、Linux 等中使用的权限。
如果您想真正使用一些系统调用,请尝试使用JNA。这大大简化了平台特定的访问。
@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
通过上面使用的方法增强了 a 的功能#containsIgnoreCase
。Main.LOG
是我制作和使用的日志记录实用程序。