2017-05-30 51 views
0

目标环境
   的Windows 7(6.1)
   的Java 1.8.0_121 64
java是否使用注册表来查找其默认jar文件?

我最近创建只包含一个单一的文件的java.exe的最小的Java环境中一个新创建的,空目录并成功运行一个简单的HelloWorld.class文件,只需将其复制到同一个目录并键入即可:

.\java HelloWorld 

我fou nd这种令人惊讶的,并想知道如果可能是因为我使用的Java版本(jre 1.8.0_72)已经从.exe文件安装,无论是在Windows注册表中有告诉java.exe在哪里可以找到rt.jar等等。

运行Java的控制面板,你肯定能看到的Java 1.8.0_72是在那里:

java control panel snap-in

我,如果我用其中未设置一个Java版本(即单机java版),我会得到一个不同的结果?

+0

不要在你自己的问题上发表多个答案。 – EJP

+0

1.要执行java应用程序,您需要一个java运行时环境。只是一个可执行文件(java.exe)通常是不够的。 2.它在你的设置中工作,因为PC已经安装在某个地方(你的屏幕截图显示了它3次)。使用默认安装程序时,[环境变量](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v = vs.85).aspx)被设置为指向Java安装包。这就是你的系统如何定位它。 –

回答

0

那么,在尝试一个独立版本之前,我想我会尝试一台没有Java的电脑。与以前一样精确设置。

找到我妻子的Windows 10计算机上的答案(上它具有没有Java)的一部分:

enter image description here

很显然,我应该某处复制java.dll。想想我将它放在与其他所有内容相同的目录中(即与java.exe相同),然后尝试。

没有。和之前一样。

很显然,java正在注册表中寻找它的.dll。

我已经下载了jre-8u121-windows-x64.tar.gz。我会尝试一下这个实验。

从上面的tarball尝试了使用java进行的相同实验。完全相同的症状。找不到java.dll。

经过一番阅读,我发现Embedded Java SE可以创建自定义Java部署。对于Windows的Java SE似乎没有官方的类似机制。

做了一些更多的阅读,我发现有一种称为Invocation API的机制,可以绕过java.exe来运行java。这可能是一些尝试。也可能是开始浏览HOTSPOT代码的时候了。

更多关于调用API的位置:http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/invocation.html

一个有趣的笔记我也碰到了我的阅读过程中曾这样说:

私人与公共JRE - 安装JDK安装一个专用的Java SE运行时环境(JRE)和可选的公共副本。私有JRE需要运行JDK附带的工具。它有没有注册表设置并且完全包含在jre目录中(通常位于C:\ Program Files \ jdk1.6.0 \ jre),其位置仅为JDK所知。

我读到这在这里:http://www.oracle.com/technetwork/java/javase/install-windows-142126.html

你可以试试这个实验与JRE。

相关问题