我在 Windows 7 上用 Java 编写了桌面程序,并通过在 HKEY_CURRENT_USER/Software 中写入 jar 文件的路径(类似于 C:\Users\User\Documents\My App.jar)来在启动时挂起它/Microsoft/Windows/CurrentVersion/Run 分支。当我的程序在 Windows 上加载时,它必须加载一些与程序位于同一文件夹中的文本文件:
File f = new File("text.txt"); // without full path to file
if(!f.exists())
JOptionPane.showMessageDialog(null, "File not found: " + f.getAbsolutePath());
但无法做到这一点,我收到消息:“找不到文件:C:\Windows\system32\text.txt”。看起来该程序也分别位于 system32 文件夹和文本文件中。我做错了什么?
最佳答案
我的理论:如果您通过传统安装程序安装了 Windows 版 Java,除了您告诉它放置的位置(规范地,JAVA_HOME
)之外,安装程序还会在其中放置一个 java.lang.java 文件。 exe
位于 system32
目录中,因此当您在启动时启动 JVM 时,system32
可能是工作目录,并且这就是它要查找的位置具有与您提供的相对路径名类似的文件。
最简单的解决方案是在代码中绝对指定文本文件的路径。我还建议在注册表项中指定 java.exe
的完整路径(我猜现在只是没有路径的 java.exe
),以便您可以保证您正在运行哪个版本;如果您安装了多个版本的 Java,则仅最近安装的一个将在 system32
中包含 java.exe
并且没有限定路径,我猜这就是您获得的版本因为此时 PATH
可能会很小。
作为结束语(与您的问题无关),我讨厌 Java 在 Windows 上执行此操作并立即删除 java.exe
的副本,然后设置 PATH
以确保我想要的版本是按需执行的版本。
关于Java 程序是从 system32 文件夹加载的,而不是从它所在的文件夹加载的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771581/