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システムプロパティまたは環境変数を使用して、構成ファイルの*場所*を指定します。すでに実行中のプログラムに設定ファイルの変更を適用するには、プログラムのコードを変更して設定ファイルを監視する必要があります。 – Andreas

関連する問題