2013-02-26 138 views
4

我有一個java程序,通過Runtime.getRuntime()。exec(command)啓動一個C編譯的程序。這個「命令」使用一個環境變量。如何強制Java重新加載環境變量

如果Java程序仍在運行,但調用exec(命令)之前將env varaible被改變(通過另一個外部處理),則C程序將仍然有舊的env值。

看來C程序越來越它是從主要的Java程序環境,重新啓動Java進程時,ENV值是正確的。有沒有辦法強制在Java進程中刷新env變量?

+1

我不認爲這與Java有什麼關係 - 只是在啓動子進程時如何重新加載環境變量。 – djechlin 2013-02-26 18:48:50

+0

@djechlin沒有OP要加載變更的環境到Java程序 – Mark 2013-02-26 19:01:41

+0

@馬克,但是這是一個操作系統問題,爪哇得到它的環境就像任何其他程序 – SJuan76 2013-02-26 19:03:37

回答

0

Java應用程序可以,只要你啓動C應用程序存儲環境變量的值,然後使用一個線程類,將一直運行。此線程類將始終檢查環境變量是否已更改,這就是爲什麼我們保存了以前的環境變量值,因此如果它發生更改,則無法通過運行系統再次執行C程序。

例如:

//inside your thread 
if (!envVar.equals(envVarPReviousValue)) { 
//execute again 
Runtime.getRumtime().exec("C-app"); 
} 
+1

你是否提出了一個專用的投票線程? – djechlin 2013-02-26 19:12:54

+0

專用池線程。是的,我的工作有類似的要求,我們解決了這個問題。這是有用的,它看起來並不太重。 – 2013-02-26 19:17:56

+1

如何檢查環境變量是否已更改?我很確定這是無稽之談。 – djechlin 2013-02-26 19:33:15

3

不要使用環境變量。

您描述的行爲是how environment variables work。您對流程環境所做的更改會傳播給其子項。但是,小孩所做的更改不會傳播回父級,任意進程也不會相互更新。

最簡單的選擇是存儲在衆所周知位置的配置文件。

+0

我希望我可以解決不使用env變量,但它是供應商的程序,我正在產卵,他是使用變量(不能更改)的使用者。這是第二次處理(也是供應商所有),用於更新env var。我們只是試圖自動調用這兩個exe的通過我們的java程序,而不是用戶手動點擊供應商的圖標。 – 2013-02-27 05:48:11