0

可能性の重複:
Shutting down a computer using Javaシステムに依存しないマシンのシャットダウン

私は一定の時間が経過するか、特定のコンピュータをシャットダウンします個人的なプログラムを作っています時間/日付。しかし、私は複数のオペレーティングシステムを実行しており、これを1つの単純な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

+0

このアプローチ(あなたの唯一の選択肢です)を取るとき、コマンドラインのように見えるデスクトップ上のURLをブラウズするのではなく、Runtime.exec()を実行してください。 –

+0

"operatingSystem = System.getProperty(" os.name ")"を使用し、結果に基づいて "Runtime.exec()"を使用するポストは、彼の最高の賭けです。 – paulsm4

答えて

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は、上記#containsIgnoreCaseを使用するなどの方法でStringの能力を増強するカスタムクラスです。 Main.LOGは私が作って使ったロギングユーティリティです。

1

番号はありません。

これは、JVMまたは標準Javaクラスライブラリの範囲外です。

ハッピーコーディング。

+0

理由を説明したら、これを投票したり、これを受け入れたりします。それが立てば、それはちょうど**近視眼的な意見のように聞こえる**。申し訳ありません... – Supuhstar

+0

@Supuhstar正直なところ、何が言いたいのか分かりません:) JDKは汎用ライブラリです。オペレーティングシステムの機能であるシステムシャットダウンコマンドを持っている*すべての*言語用の*標準ライブラリは知りません。これには、オペレーティングシステムによって提供されるシステムコール(LinuxカーネルまたはWindowsとWinAPIのいずれか)がstdlibを介して公開されていないものも含まれます。すべてのオペレーティングシステム機能のサブセットのみがPOSIX APIの一部として公開されています。「コンピュータの電源を切る」ことができませんでした。 –

+0

... "java.awt.Toolkit#shutdown()"はシステム固有のものですか?個々のJVMが実際のシャットダウンコマンドを処理できないのはなぜですか?また、Javaバイトコードは同じですか? – Supuhstar

0

なぜスケジューラを使用しないのですか?主要なオペレーティングシステムはすべてこのような機能(cron、atなど)をサポートしています。現代のウィンドウ(ウィンドウズ7)、Linuxなどで再生する許可などの他の要因があるかもしれません。

実際にシステムコールを使用する場合は、JNAを試してみてください。これにより、プラットフォーム固有のアクセスが簡単になります。

+0

このプログラムにはスケジュールされたシャットダウン以上のものがあるため – Supuhstar

関連する問題