0

可能重复:
Shutting down a computer using Java系统独立的机器关机Java中

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

+4

看看:http://stackoverflow.com/questions/25637/shutting-down-a-computer-using-java – Rob 2011-12-23 05:23:05

+0

当采取这种方法(这将是你唯一的选择),我建议直接使用' Runtime.exec()'而不是在桌面上浏览一些看起来像命令行的URL。 – 2011-12-23 05:24:08

+0

根据结果使用“operatingSystem = System.getProperty(”os.name“)”,然后是“Runtime.exec()”的帖子绝对是他最好的选择。 – paulsm4 2011-12-23 05:26:45

回答

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是我制作和使用的日志记录工具。

1

不,没有。

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

快乐编码。

+0

如果它解释了原因,我会对此进行投票或接受。就目前来看,它只是**听起来像一个短视的意见。对不起...... – Supuhstar 2011-12-24 01:22:19

+0

@Supuhstar老实说不知道还有什么可说的:) JDK是一个通用库。我不知道任何具有system-shutdown命令的任何*语言的*任何*标准库,这是一个操作系统功能。这包括C,因为许多由操作系统提供的系统调用(不管是Linux内核还是Windows和WinAPI)都不会以任何方式通过stdlib公开。作为POSIX API的一部分,只有部分操作系统功能被公开:我找不到“关闭计算机”。 – 2011-12-25 00:14:44

+0

所以......你是说“java.awt.Toolkit#shutdown()”太系统特定?为什么单个JVM不能处理实际的关闭命令,而Java字节码仍然是相同的? – Supuhstar 2012-01-01 08:12:01

0

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

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

+0

,因为这个程序比定时关机更多 – Supuhstar 2011-12-24 01:22:53