使用CMD执行javac -h生成JNI头文件时出现“file not found: Launcher.java”错误的解决方法
解决javac -h生成JNI头文件时"file not found: Launcher.java"的问题
我之前处理过类似的JNI头文件生成问题,这个错误的核心原因很简单:javac在当前CMD的工作目录下找不到你的Launcher.java源文件。下面给你两种适配自动化执行(配合jpackage)的解决方案,以及手动调试的快速方法:
方案1:先切换CMD工作目录到源文件路径(推荐用于自动化脚本)
如果要把命令集成到其他程序自动执行,最稳妥的方式是先让CMD切换到Launcher.java所在的目录,再执行javac命令。
比如假设你的Launcher.java放在E:\Java\Auto Key Press\src文件夹下,先执行目录切换命令:
cd /d "E:\Java\Auto Key Press\src"
然后再执行你的javac命令(此时无需修改Launcher.java的写法,因为当前目录已经是源文件所在目录):
javac -h "E:\JNI\_JavaHeaders" Launcher.java -cp "E:\Java\Auto Key Press\bin" -d "E:\JNI\_JavaHeaders\ClassFiles" -encoding utf8 --module-path "D:\Java\javafx-jmods-16" --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.base
如果是写批处理脚本,把这两行命令放在一起即可,自动化执行时不会出现路径问题。
方案2:给Launcher.java指定完整绝对路径
如果你不想切换目录,也可以直接在javac命令里给Launcher.java加上它的完整路径。比如还是假设源文件在E:\Java\Auto Key Press\src下,修改后的命令如下:
javac -h "E:\JNI\_JavaHeaders" "E:\Java\Auto Key Press\src\Launcher.java" -cp "E:\Java\Auto Key Press\bin" -d "E:\JNI\_JavaHeaders\ClassFiles" -encoding utf8 --module-path "D:\Java\javafx-jmods-16" --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.base
这样javac就能精准定位到源文件,不会再报找不到的错误。
手动调试的快速验证方法
如果只是想手动调试验证命令是否正常,可以用这个快捷方式:
- 打开文件资源管理器,进入
Launcher.java所在的文件夹 - 按住SHIFT键,右键点击文件夹空白处,选择「在此处打开PowerShell窗口」
- 在PowerShell中输入
cmd切换到CMD环境,然后执行你的javac命令即可,此时当前目录就是源文件所在目录,命令会正常运行。
内容的提问来源于stack exchange,提问作者Devorious
相关产品推荐
相关产品推荐

