首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么System.getenv("CATALINA_HOME")返回null?

为什么System.getenv("CATALINA_HOME")返回null?
EN

Stack Overflow用户
提问于 2013-05-07 07:31:18
回答 2查看 28.9K关注 0票数 9

我定义了一个系统变量CATALINA_HOME,它引用了操作系统系统中的tomcat安装目录(windows 7终极64位),现在我想通过java获得它,我的代码如下:

代码语言:javascript
复制
System.out.println(System.getenv("CATALINA_HOME"));

它返回null,我确信这个变量存在于我的系统中,我在cmd控制台中输入set catalina_home,它准确地显示分配给它的值。

那么,为什么我不能得到它,或者有其他方法来获得system变量呢?

PS:下面是System.getenv()检索的所有变量。

代码语言:javascript
复制
    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"));

产出:

代码语言:javascript
复制
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

如我们所见,最后一行为null,即CATALINA_HOME变量的值。

PS:我的猫不是安装版。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-07 08:01:34

可能的原因:

  1. 您在命令提示符中使用了set CATALINA_HOME。使此变量成为此窗口的局部变量。它对从此命令提示符启动的进程应该是可见的,但在其他任何地方都是不可见的。使用My Computer > Advanced > Environment Variables使变量对所有新进程可见。

  1. 试图读取变量的进程已经在运行。重新开始。 注意:如果从调试器启动Tomcat,或者从命令行启动独立Tomcat进程,则可能是IDE。

  1. Tomcat的start脚本在调用java.exe之前取消变量的设置

  1. Tomcat在它的Java代码中取消变量。
票数 14
EN

Stack Overflow用户

发布于 2017-05-20 13:20:52

如果方法system.getenv("some name")返回null,那么在您的环境中午餐Eclipse之后可能会定义这个变量。只需重新启动Eclipse,然后再次运行项目。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16413573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档