为什么运行包含 Java 命令的 bash 脚本会给出“缺少类”错误?

为什么运行包含 Java 命令的 bash 脚本会给出“缺少类”错误?

有几个我想运行的 .sh 文件。

我是一个普通的 Windows 用户,所以我对此不太了解。我有 .bat 文件,它们对我来说工作正常。但是当我切换到 Ubuntu 时,它显示了一个错误:

proton@proton-5750:~/Desktop/nand to tetris$ ./HardwareSimulator.sh
Exception in thread "main" java.lang.NoClassDefFoundError: HardwareSimulatorMain
Caused by: java.lang.ClassNotFoundException: HardwareSimulatorMain
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: HardwareSimulatorMain. Program will exit.
proton@proton-5750:~/Desktop/nand to tetris$ ./HardwareSimulator.sh
Exception in thread "main" java.lang.NoClassDefFoundError: HardwareSimulatorMain
Caused by: java.lang.ClassNotFoundException: HardwareSimulatorMain
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: HardwareSimulatorMain. Program will exit.

我不知道为什么这些 Java 错误会在 Ubuntu 中发生......

大家给我解决办法吧,先谢谢了.....

答案1

最有可能的情况是,shell 脚本(用于启动 Java 程序)已从 Windows 移植,但类路径的构造仍使用分号;在 Linux 上,PATH 分隔符是冒号。尝试将 -cp 参数中的分号替换为冒号。或者,由于 Ubuntu 中默认安装的 Java 是 Java 6,因此 -cp 参数的通配符形式将起作用 - 传递包含 jar 文件的文件夹,末尾带有 /*。您必须将其括在单引号中,以便 shell 不会将其展开。

答案2

来自此链接:

3种解决方法找不到类定义错误在 Java 中

1 课程不适用于Java 类路径 (如何在 Windows Unix 和 Linux 上设置 Java 的 Classpath)。
2 您可能正在使用 jar 命令运行程序,但清单文件的 ClassPath 属性中未定义类。
3 任何启动脚本都会覆盖 Classpath 环境变量。

相关内容