簡體   English   中英

為什么 System.getenv(“CATALINA_HOME”) 返回 null?

[英]why System.getenv(“CATALINA_HOME”) returns null?

我定義了一個系統變量CATALINA_HOME ,它指的是我的操作系統系統(windows 7 Ultimate 64位)中的tomcat安裝目錄,現在我想通過java獲取它,我的代碼如下:

System.out.println(System.getenv("CATALINA_HOME"));

它返回null,我很確定這個變量存在於我的系統中,我在cmd控制台中輸入set catalina_home ,它准確地顯示了分配給它的值。

那么為什么我不能得到它,或者有其他方法來獲取系統環境變量嗎?

PS :以下是System.getenv()檢索到的所有變量。

    Map<String, String> env = System.getenv();
    for (String key : env.keySet())
    {
        System.out.println(key + ":" + env.get(key));
    }

    System.out.println(System.getenv("CATALINA_HOME"));

輸出:

USERPROFILE:C:\Users\chorusheng
ProgramData:C:\ProgramData
PATHEXT:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
JAVA_HOME:C:\Program Files\Java\jdk1.6.0_20
ProgramFiles(x86):C:\Program Files (x86)
TEMP:C:\Users\CHORUS~1\AppData\Local\Temp
SystemDrive:C:
ProgramFiles:C:\Program Files
Path:C:/Program Files (x86)/Java/jre7/bin/client;C:/Program Files (x86)/Java/jre7/bin;C:/Program Files (x86)/Java/jre7/lib/i386;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;d:\Program Files (x86)\KOUTON\CTBS Standard Client;C:\Program Files (x86)\PC Connectivity Solution\;D:\oracle\product\11.2.0\dbhome_1\bin;C:\Program Files (x86)\Common Files\NetSarang;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\EgisTec BioExcess\;C:\Program Files (x86)\EgisTec BioExcess\x64;C:\Program Files (x86)\Common Files\Thunder Network\KanKan\Codecs;d:\Program Files (x86)\Tencent\QQPCMgr\6.6.2150.401;D:\Program Files (x86)\TortoiseSVN\bin;d:\Program Files (x86)\DigiWin OpenVPN\bin;d:\Program Files (x86)\Tencent\QQPCMgr\6.6.2150.401;F:\chega\eclipsej2ee3.7;
HOMEDRIVE:C:
DYNA_HOME:E:\plm
PROCESSOR_REVISION:2502
USERDOMAIN:chorus
ALLUSERSPROFILE:C:\ProgramData
ProgramW6432:C:\Program Files
PROCESSOR_IDENTIFIER:Intel64 Family 6 Model 37 Stepping 2, GenuineIntel
SESSIONNAME:Console
TMP:C:\Users\CHORUS~1\AppData\Local\Temp
CommonProgramFiles:C:\Program Files\Common Files
CLASSPATH:.;C:\Program Files\Java\jdk1.6.0_20\lib\dt.jar;C:\Program Files\Java\jdk1.6.0_20\lib\tools.jar;
LOGONSERVER:\\CHORUS
PROCESSOR_ARCHITECTURE:AMD64
FP_NO_HOST_CHECK:NO
OS:Windows_NT
HOMEPATH:\Users\chorusheng
PROCESSOR_LEVEL:6
CommonProgramW6432:C:\Program Files\Common Files
1830B7BD-F7A3-4c4d-989B-C004DE465EDE:f44:431b280
LOCALAPPDATA:C:\Users\chorusheng\AppData\Local
COMPUTERNAME:CHORUS
windir:C:\Windows
SystemRoot:C:\Windows
asl.log:Destination=file
NUMBER_OF_PROCESSORS:4
USERNAME:chorusheng
PUBLIC:C:\Users\Public
PSModulePath:C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
CommonProgramFiles(x86):C:\Program Files (x86)\Common Files
ComSpec:C:\Windows\system32\cmd.exe
APPDATA:C:\Users\chorusheng\AppData\Roaming
null

正如我們所看到的,最后一行是空的,它是 CATALINA_HOME 變量的值。

PS :我的tomcat不是安裝版。

可能的原因:

  1. 您已經在命令提示符中使用了set CATALINA_HOME 這使得這個變量本地化到這個窗口。 它應該對從此命令提示符啟動的進程可見,但在其他任何地方都不可見。 使用My Computer > Advanced > Environment Variables使變量對所有新進程可見。

  2. 嘗試讀取變量的進程已經在運行。 重新啟動它。

    注意:如果從調試器啟動 Tomcat,則可能是 IDE,也可能是從命令行啟動的獨立 Tomcat 進程。

  3. Tomcat 的啟動腳本會在調用java.exe之前取消設置變量

  4. Tomcat 在它的 Java 代碼中取消設置變量。

如果方法system.getenv("some name")返回null可能是您在 Eclipse IDE 吃完午飯后在您的環境中定義了這個變量。 只需重新啟動 Eclipse,然后再次運行您的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM