我写了一个简单的hello world程序来测试JDK的安装。我可以使用以下命令从Vim编译:
:!javac Desktop\HelloWorld.java
这很好但是当我尝试使用以下命令运行程序时:
:!java Desktop\HelloWorld
它给了我这个错误:
C:\ Windows \ system32 \ cmd.exe / c java“Desktop \ HelloWorld” 线程“main”中的异常java.lang.NoClassDefFoundError:Desktop \ HelloWorld(w 荣名:HelloWorld) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) 在java.net.URLClassLoader.access $ 000(未知来源) 在java.net.URLClassLoader $ 1.run(未知来源) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher $ AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) 找不到主类:Desktop \ HelloWorld。程序将会退出。
程序在正常命令行中运行良好。
C:\Users\Casey\Desktop>java HelloWorld
Hello world!
如何在不必切换到标准cmd的情况下从Vim执行程序?
答案 0 :(得分:5)
java
不会将文件名作为其第一个非选项参数。相反,它应该指定主类名(在包名和类名之间有.
s,如果有任何包以外的默认值)。使用-classpath
指定从哪里加载类(使用OS的目录分隔符(\
)分隔目录)。
:!java -classpath Desktop HelloWorld
答案 1 :(得分:2)
罪魁祸首就是这条线:
java Desktop \ HelloWorld
您传递给“java”程序的参数是类名,而不是路径名。如果文件位于“Desktop.HelloWorld”包(目录Desktop \ HelloWorld)中,则需要执行以下命令:
java Desktop.HelloWorld
(以上所有假设您都位于“桌面”文件夹正上方的文件夹中。)
答案 2 :(得分:1)
当你从命令行运行java时,你还运行java Desktop \ HelloWorld?
作为第一个建议,我建议尝试运行以下命令,以便从同一目录编译和执行程序:
:!cd桌面 :!javac HelloWorld.java :!java HelloWorld
答案 3 :(得分:1)
我将在这里采取一种有根据的猜测,但是vim可能无法识别路径变量,就像从命令行调用java一样。当然,如果您要在vim中进行大量的Java编码,您可能需要查看this plugin。