2016-08-31 2 views
0

Java를 사용하여 환경 변수에 최신/업데이트 된 사본을 가져오고 싶습니다.Java에서 환경 변수의 업데이트 된 사본 얻기

누군가 프로그램을 실행 한 후 누군가가 특정 환경 변수를 변경하면 Java가 최신 복사본을 반환하지 않습니다.

아래 예제 코드를 사용하여 시나리오를 테스트하십시오.

import javax.swing.JOptionPane; 

public class Test extends Thread { 
    public static void main(String[] args) { 
     Test test = new Test(); 
     test.start(); 
    } 

    @Override 
    public void run() { 
     super.run(); 
     while (true) { 
      JOptionPane.showMessageDialog(null, System.getenv("A")); 
      try { 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

업데이트 : 시도 ProcessBuilder를 또한

ProcessBuilder processBuilder = new ProcessBuilder("echo %A%"); 
System.out.println(processBuilder.environment().get("A")); 
+0

환경을 어떻게 변경 했습니까? 프로그램을 실행 한 후에 변수를 내보내는 것만으로도 해당 프로그램의 환경이 변경되지는 않습니다. –

+0

Windows의 경우 시스템 속성 대화 상자를 사용하고 있습니다. –

답변

1

JVM이 시작되고 변경되지 않습니다 때 환경 변수가 설정됩니다.

일반적으로 모든 Windows 프로그램에 해당됩니다. 예 : 명령 프롬프트를 시작하고 Windows 제어판을 통해 환경 변수를 변경하면 명령 프롬프트가 이 아닌은 변경된 값을 봅니다.

다음에 명령 프롬프트 만 열림 변경 사항이 표시됩니다.

+0

"명령 프롬프트"에 대해 알고 있는데, 내 요구 사항을 달성 할 수있는 방법이 있습니까? –

+1

@yogeshprajapati 아니에요. 환경 변수는 Windows와 Linux/Unix에서 모두 비슷하게 작동합니다. 새 프로그램이 시작되면 모든 변수의 스냅 샷이 만들어지고 그 값은 더 이상 프로그램을 실행하지 않는 원래 쉘에 첨부되지 않습니다. 셸과 응용 프로그램간에 전송해야하는 정보를 보내는 다른 방법을 찾아야합니다. –

+0

나는 @ MichałKosmulski와 동의한다. 프로그램은 일반적으로 구성 파일 (XML, Properties, ...)을 사용하고 Java System 속성 또는 환경 변수를 사용하여 구성 파일의 * 위치 *를 지정해야합니다. 이미 실행중인 프로그램에 구성 파일의 변경 사항을 적용하려면 구성 파일에서 변경 사항을 모니터링하도록 프로그램을 코딩해야합니다. – Andreas