有几个我想运行的 .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
来自此链接:
1
课程不适用于Java 类路径 (如何在 Windows Unix 和 Linux 上设置 Java 的 Classpath)。
2
您可能正在使用 jar 命令运行程序,但清单文件的 ClassPath 属性中未定义类。
3
任何启动脚本都会覆盖 Classpath 环境变量。