2013-09-24 50 views
0

嗨,我一直在努力讓'getenv'工作。它將繼續返回「線程中的異常」main「java.lang.UnsupportedOperationException」。我一直在閱讀關於ProcessBuilder的知識,但是我不太清楚在下面的代碼中如何以及在哪裏實現它。讓getenv在使用Java的Windows中工作

我想要做的就是當條件滿足時設置一個變量(「REGRESSION_STATUS」,「UPDATED」)和(「REGRESSION_STATUS」,「OUTDATED」),並返回值「UPDATED」和「 OUTDATED「,當通過Windows中的cmd執行時。

public static void main(String[] args) throws ClassNotFoundException { 
    String run_type = args[0]; 
    String inputFile = args[1]; 

    System.out.println("RUN TYPE = " + run_type); 
    System.out.println("INPUT FILE = " + inputFile); 

    MiniData data = getValue(run_type, "LEM"); 

    if(run_type.equals("BUILD")){ 
     System.out.println("Script = " + data.getScript()); 
    } 
    else if (run_type.equals("DEPLOY")){ 
     System.out.println("Script = " + data.getScript()); 
    } 
    else if (run_type.equals("REGRESSION")){ 
     System.out.println("Runtime Version (DB) = " + data.getRuntime()); 
     String file_name =inputFile; 

     if(data.getRuntime().equals(getRuntimeVersion(file_name))) 
     { 
      System.out.println("The version is up-to-date"); 
      System.getenv().put("REGRESSION_STATUS", "UPDATED"); 
      System.getenv().put("REGRESSION_VER", data.getRuntime()); 
     } 
     else 
     { 
      System.out.println("This version is outdated"); 
      System.getenv().put("REGRESSION_STATUS", "OUTDATED"); 
      System.getenv().put("REGRESSION_VER", data.getRuntime()); 
     } 
    } 
    else { 
     System.out.println("You have not the correct value. Enter either BUILD/DEPLOY/REGRESSION"); 
    } 
} 

謝謝!

回答

1

System.getenv() method returns an unmodifiable view的環境變量。你不能用它來設置你在這裏做的環境變量。

您可以「設置」環境變量的唯一時間是在爲子進程創建環境時,使用ProcessBuilder類或Runtime.exec方法,但即使此時您並未修改環境副本。

+0

然後,有什麼解決方案,我想實現? – Luqman

+0

如果一個進程設置了一個環境變量,它只會影響它自己的環境以及它將啓動的子進程的環境。你不會產生任何孩子,所以你想達到什麼目的? – Joni

1

您必須使用C putenv和JNI,沒有辦法從Java那做。