2013-01-06 88 views
0

我正在學習如何從命令行運行Java,並且遇到同樣的問題。我正在運行的main()方法是bin/edu/cuny/util/ConvertTestVectors.classJava Classpath問題 - 不會運行

我將我的目錄設置爲bin/cuny/。當我運行> java -cp . ConvertTestVectors我得到:

Error: Could not find or load main class ConvertTestVectors 

當我運行> java -cp . util/ConvertTestVectors我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: util/ConvertTestVectors (wrong name: edu/cuny/util/ConvertTestVectors) 
     at java.lang.ClassLoader.defineClass1(Native Method) 
     at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
     at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:480) 

有人能指出我在正確的方向?謝謝!

回答

1

cd bin/edu/cuny && java util.ConvertTestVectors

你必須使用完整的包名。

+0

感謝。但是這就是第二個錯誤NoClassDefFoundError。 –

+0

你說你從'util/ConvertTestVectors'得到了第二個錯誤,而不是'util.ConvertTestVectors'。 – Logan

+0

我將'/'改爲'.',並沒有關係。 –

2

要運行某個java類的main方法,您必須在命令行中指定該類的完全限定名稱。例如,如果你在你的來源:

package edu.cuny.util; 

class ConvertTestVectors { 
    ... 
    public static void main(String [] args) { 
     ... 
    } 
    ... 
} 

然後運行這個main方法,你應該使用

java edu.cuny.util.ConvertTestVectors 

如果你的包名是不同的,你應該在命令行相應地更改類名。

另外,還有一個CLASSPATH變量,它決定了java尋找類的位置。它應該包含你的java包所在的目錄(edu的父目錄是前一個例子的情況)。如果它包含.,那麼您可以將目錄更改爲該根目錄並運行java命令。

一個完全合格的類名的部分由點(.)分離,所以你不應該用在類名斜槓(/

+0

這就是OP使用-cp的原因。 ;) – Logan