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