2009-07-27 31 views
2

JDKのインストールをテストするための単純なhello worldプログラムを作成しました。私が使ってVimのからコンパイルすることができますVim:vimコマンドでjavaを実行するとエラーが発生する

うまく動作しますが、私は使用してプログラムを実行しようとすると、
:!javac Desktop\HelloWorld.java 

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.

プログラム:

:!java Desktop\HelloWorld 

を、それは私にこのエラーが発生します通常のコマンドラインからうまく動作します。

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

標準のcmdに切り替えることなくプログラムをVimから実行するにはどうすればよいですか?

答えて

5

javaは、最初の非オプション引数としてファイル名を使用しません。その代わりに、メインクラス名(デフォルト以外のパッケージがあれば、パッケージ名とクラス名の間に.)を指定する必要があります。クラスをロードする場所を指定するには、-classpathを使用します(OSのディレクトリ区切り文字(\)で区切られたディレクトリ)。

:!java -classpath Desktop HelloWorld 
+0

ではありません!java -classpath Desktop.HelloWorld? はあなたの期間を過ごしたようです。 – GoingTharn

+0

HelloWorldはクラスです、デスクトップはそれを見つけることができるパスです。また、クラスがデフォルトのパッケージを使用しているようです(そうでないとjava HelloWorldは動作しません)。したがって、そこに点がないことは確かに正しいです。 – Joey

+0

そうです。 'Desktop'はパッケージのために間違っている最初の帽子を持っています。 'Desktop'は私がWindows上で見つけることが期待されるディレクトリでもあります。 –

1

コマンドラインからjavaを実行すると、java Desktop \ HelloWorldも実行されますか?私はあなたが同じディレクトリからプログラムをコンパイルして実行するように、次のことを実行してみてくださいすることをお勧め最初の提案として

:!CDデスクトップ :!のjavac HelloWorld.java :!のJava HelloWorldの

1

私はここで推測を取るつもりですが、vimのは、コマンドラインの意志からJavaを呼び出すように、パス変数を認識していない可能性があります。もちろん、vimで多くのJavaコーディングを行うつもりなら、this pluginを見てみてください。

+0

これは私の最初の推測でしたが、出力(例外メインのスレッド)を見れば、適切なexeが呼び出されていることがわかります(そうでなければ、 'java'は内部として認識されませんまたは外部コマンド、動作可能なプログラムまたはバッチファイルである。 – chocojosh

2

犯人はこの行です:

のJava Desktop \ HelloWorldの

あなたは「java」のプログラムに渡している引数は、クラス名ではなく、パス名です。ファイルは、パッケージに「Desktop.HelloWorld」(ディレクトリデスクトップ\ HelloWorldの)であれば、あなたがそれを実行する必要があります。

Javaは

をDesktop.HelloWorld(上記のすべては、あなたがフォルダ内にあることを前提としてい「デスクトップ」フォルダのすぐ上にあります)。

関連する問題