无法在CentOS WSL 2中运行Java:加载主类文件时出错,NVIDIA

7kqas0il  于 6个月前  发布在  Java
关注(0)|答案(1)|浏览(121)

我试图运行一个shell脚本来运行Java应用程序。由于版权问题,我不能发布整个脚本。但执行Java的一行如下(经过一些修改)
第一个月
其中$java_vm是java的路径
在执行脚本时,我得到了以下错误:
错误:找不到或加载主类Files.NVIDIA原因:java.lang.ClassNotFoundException:Files.NVIDIA
我在WSL 2 CentOS系统中运行此程序。我发现此错误可以通过完全删除-DPATH=$PATH选项来修复。然而,这样做将删除应用程序访问互联网的能力(可能是因为删除了一些重要的网络路径)
这是我的PATH变量

/usr/lib/jvm/java-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin:/usr/lib/jvm/jre-17-openjdk-17.0.1.0.12-2.el8_5.x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program Files/WireGuard/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files/usbipd-win/:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Users/myName/AppData/Local/Programs/Python/Python312/Scripts/:/mnt/c/Users/myName/AppData/Local/Programs/Python/Python312/:/mnt/c/Users/myName/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/myName/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/myName/AppData/Local/GitHubDesktop/bin:/mnt/c/Program Files/KS-Wireshark:/root/bin

字符串
我试图在WSL 2 CentOS系统中运行shell脚本。我希望它能正常运行,但我得到了这个错误,可以通过删除-DPATH选项来解决。但这样做会删除应用程序网络功能

rqenqsqc

rqenqsqc1#

这是因为java不会将PATH变量理解为一个命令(或参数),而是由于空间而将其理解为多个参数。
例如,路径的一部分发生错误::/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR
命令JVM understand看起来像:java_vm -Xmx128m -classpath "$CLASSPATH" -DDISPLAY=$DISPLAY -DPATH=:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR其中JVM将只识别:/mnt/c/Program Files/NVIDIA作为您输入的唯一路径,并且Files/NVIDIA成为单个参数,指示主类的名称。
为了解决这个问题,在使用变量时添加",如“$PATH”,这将阻止命令解析器解析空间。

相关问题