0

가능한 중복 :
Shutting down a computer using Java시스템 독립적 인 시스템 종료

I는 일정 시간 후 또는 일정에서 내 컴퓨터를 종료하는 개인 프로그램을 만드는 중이라서 시간/날짜. 그러나 여러 운영 체제를 실행 중이며 하나의 간단한 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

그 방법을 택할 때 (유일한 선택이 될 것입니다) Runtime.exec()'명령 줄과 같은 모양의 데스크탑에서 URL을 탐색하는 대신. –

+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는 범용 라이브러리입니다. 운영 체제 기능인 system-shutdown 명령이있는 * 모든 * 언어에 대한 * 표준 라이브러리를 모르겠습니다. 여기에는 운영 체제에서 제공하는 많은 시스템 호출 (Linux 커널 또는 Windows 및 WinAPI 일 수 있음)이 stdlib를 통해 노출되지 않기 때문에 C가 포함됩니다. 모든 운영 체제 기능의 하위 집합 만 POSIX API의 일부로 제공됩니다. "컴퓨터 끄기"에서 찾을 수 없습니다. –

+0

그래서 ... "java.awt.Toolkit # shutdown()"이 너무 시스템 특정 적이라고 말하는 것입니까? 왜 개별 JVM이 실제 shutdown 명령을 처리 할 수없고 Java 바이트 코드가 여전히 동일하지 않습니까? – Supuhstar

0

왜 스케줄러를 사용하지 않습니까? 모든 주요 운영 체제는 이러한 기능 (cron, at 등)을 지원합니다. 현대 윈도우 (윈도우 7), 리눅스 등에서 재생할 수있는 권한과 같은 다른 요소가있을 수 있습니다.

어떤 시스템 호출을 실제로 사용하려면 JNA을 사용해보십시오. 이는 플랫폼 특정 액세스를 훨씬 단순화합니다.

+0

예정된 종료보다이 프로그램에 더 많은 것이 있기 때문에 – Supuhstar

관련 문제