我有一個java程序,通過Runtime.getRuntime()。exec(command)啓動一個C編譯的程序。這個「命令」使用一個環境變量。如何強制Java重新加載環境變量
如果Java程序仍在運行,但調用exec(命令)之前將env varaible被改變(通過另一個外部處理),則C程序將仍然有舊的env值。
看來C程序越來越它是從主要的Java程序環境,重新啓動Java進程時,ENV值是正確的。有沒有辦法強制在Java進程中刷新env變量?
我有一個java程序,通過Runtime.getRuntime()。exec(command)啓動一個C編譯的程序。這個「命令」使用一個環境變量。如何強制Java重新加載環境變量
如果Java程序仍在運行,但調用exec(命令)之前將env varaible被改變(通過另一個外部處理),則C程序將仍然有舊的env值。
看來C程序越來越它是從主要的Java程序環境,重新啓動Java進程時,ENV值是正確的。有沒有辦法強制在Java進程中刷新env變量?
Java應用程序可以,只要你啓動C應用程序存儲環境變量的值,然後使用一個線程類,將一直運行。此線程類將始終檢查環境變量是否已更改,這就是爲什麼我們保存了以前的環境變量值,因此如果它發生更改,則無法通過運行系統再次執行C程序。
例如:
//inside your thread
if (!envVar.equals(envVarPReviousValue)) {
//execute again
Runtime.getRumtime().exec("C-app");
}
不要使用環境變量。
您描述的行爲是how environment variables work。您對流程環境所做的更改會傳播給其子項。但是,小孩所做的更改不會傳播回父級,任意進程也不會相互更新。
最簡單的選擇是存儲在衆所周知位置的配置文件。
我希望我可以解決不使用env變量,但它是供應商的程序,我正在產卵,他是使用變量(不能更改)的使用者。這是第二次處理(也是供應商所有),用於更新env var。我們只是試圖自動調用這兩個exe的通過我們的java程序,而不是用戶手動點擊供應商的圖標。 – 2013-02-27 05:48:11
我不認爲這與Java有什麼關係 - 只是在啓動子進程時如何重新加載環境變量。 – djechlin 2013-02-26 18:48:50
@djechlin沒有OP要加載變更的環境到Java程序 – Mark 2013-02-26 19:01:41
@馬克,但是這是一個操作系統問題,爪哇得到它的環境就像任何其他程序 – SJuan76 2013-02-26 19:03:37