2009-07-27 174 views
2

我編寫了一個簡單的Hello World程序來測試JDK安裝。我可以用在Vim編譯:Vim:從vim命令運行java給出錯誤

:!javac Desktop\HelloWorld.java 

這只是罰款,但是當我嘗試使用運行程序:

:!java Desktop\HelloWorld 

它給了我這個錯誤:

C:\Windows\system32\cmd.exe /c java "Desktop\HelloWorld" Exception in thread "main" java.lang.NoClassDefFoundError: Desktop\HelloWorld (w rong name: 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) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) 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) Could not find the main class: Desktop\HelloWorld. Program will exit.

程序通常的命令行工作得很好。

C:\Users\Casey\Desktop>java HelloWorld 
Hello world! 

我怎麼能執行從Vim的程序,而無需切換到標準CMD?

回答

5

java不會將文件名作爲其第一個非選項參數。相反,它應該指定主類名稱(在軟件包名稱和類名稱之間使用.,如果有其他軟件包而不是缺省值)。使用-classpath來指定從哪裏加載類(使用與操作系統的目錄分隔符分隔的目錄(\))。

:!java -classpath Desktop HelloWorld 
+0

是不是!java -classpath Desktop.HelloWorld? 看起來像SO吃了你的期間 – GoingTharn 2009-07-27 22:30:17

+0

HelloWorld是類,Desktop是它可以找到的路徑。此外,它似乎該類使用默認包(否則Java HelloWorld不會工作)。所以缺少這個點確實是正確的。 – Joey 2009-07-27 23:24:39

1

當您從命令行運行java時,是否還運行java Desktop \ HelloWorld?

作爲第一個建議,我會建議嘗試運行以下讓你編譯並從同一目錄執行程序:

:CD桌面 :javac的HelloWorld.java :java的HelloWorld的

1

我打算在這裏做一個有根據的猜測,但是vim可能不會識別路徑變量,就像在命令行中調用java那樣。當然,如果你要在vim中進行大量的Java編碼,你可能需要看看this plugin

2

罪魁禍首是這一行:

的Java Desktop \ HelloWorld的

的參數要傳遞給「Java」的程序是一個類名,而不是路徑名。如果該文件是在包「Desktop.HelloWorld」(目錄桌面\ HelloWorld的),那麼你需要執行它:

的Java Desktop.HelloWorld

(以上所有假定您的文件夾中直接在「桌面」文件夾上方)。