2011-11-19 32 views
0

我正在嘗試關閉Windows操作系統的以下Java代碼。我正在使用使用Netbeans IDE 6.9.1的Microsoft Windows XP Professional版本2002,Service Pack 3與Intel(R)Core(TM)i3 CPU使用Java代碼關閉windows操作系統

package shutdownos; 

import java.io.IOException; 

final public class Main 
{ 
    public static void main(String... args) throws IOException 
    { 
     String shutdownCommand=""; 
     String operatingSystem = System.getProperty("os.name"); 

     if ("Linux".equals(operatingSystem) || "Mac OS X".equals(operatingSystem)) 
     { 
      shutdownCommand = "shutdown -h now"; 
     } 
     else if ("Windows".equals(operatingSystem)) 
     { 
      shutdownCommand = "shutdown.exe -s -t 0"; 
     } 
     else 
     { 
      //throw new RuntimeException("Unsupported operating system."); 
     } 

     Runtime.getRuntime().exec(shutdownCommand); 
     System.exit(0); 
    } 
} 

它拋出以下異常在Java中。

Exception in thread "main" java.lang.IllegalArgumentException: Empty command 

上述代碼中的以下行發生異常。

Runtime.getRuntime().exec(shutdownCommand); 

main()方法中倒數第二個。這段代碼有什麼問題?

+0

在該行放置一個斷點並查看shutdownCommand是什麼。我認爲它沒有設置。嘗試取消註釋拋出異常。這段代碼還有很多其他的錯誤,但讓我們從這裏開始。 –

+0

我在上面的代碼中修改了這行'else if(「Windows」.equals(operatingSystem)) 'else if(「Windows XP」.equals(operatingSystem))'並且窗口成功關閉。 – Lion

+0

另請注意,您可能不允許運行此命令。你的代碼應該正確處理這種情況。 –

回答

5

您正在尋找的os.name錯誤的價值 - 不管它是什麼,它不是「窗口」,因此代碼通過else塊,其中變量shudowncommand保留爲空字符串,這會導致「空運行命令「異常。做一個System.out.println(operatingSystem)看看你應該檢查什麼值,而不是「Windows」。

它可能類似於「Windows NT」,所以如果你用.startsWith()檢查代替.equals()檢查,你應該設置。

1

windows os的shutdown命令應該是shutdown -s -t 0。試試這個。

4

根據this頁面的說法,您似乎對O/S名稱使用了錯誤的值。如果是這種情況,您的shutdownCommand字符串將保持爲空,這將導致您的程序傳遞一個空命令,這與您得到的異常一致。

3

程序跳過兩個if語句,os.name不會只是Windows中,這將是我認爲Windows XP或以上,因此與

else if (operatingSystem.startsWith("Windows")){ 

} 
3

沒有財產「替換成開始os.name「等於」Windows「。你的意思是檢查該屬性是否包含「Windows」?據我所知,所有的窗口操作系統的名稱有一個量詞,如「視窗95」,「Windows NT的」等

相關問題