2013-10-10 156 views
2

我在Intellij IDEA中編寫了一個程序。它在IDE中運行良好,但是我在命令行遇到問題(我很少從命令行運行自己的命令,我認爲我只是缺少一個步驟。)所以問題就出在這裏。 如果我瀏覽到我的文件是:java編譯命令行

cd averageAmpCov/src/ 

,然後運行我的程序,它工作正常:

java averageAmpCov 

Error: Parameter 'out' is required. 
Error: Parameter 'in' is required. 
Usage: java averageAmpCov 
     (-o|--outputlocation) <out> (-i|--inputlocation) <in> 

    (-o|--outputlocation) <out> 
     Where is the input file to be put? Full path and desired file name 

    (-i|--inputlocation) <in> 

但是,當我試圖從這樣的文件夾之外運行:

java averageAmpCov/src/averageAmpCov 

我得到一個可悲的錯誤:

Exception in thread "main" java.lang.NoClassDefFoundError: averageAmpCov/src/averageAmpCov (wrong name: averageAmpCov) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792) 
    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:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) 

其他一些帖子說這可能是一個類路徑問題,但我真的不知道該怎麼做。我在這裏做錯了什麼?

+0

java命令averageAmpCov/src目錄/ averageAmpCov – Ingo

+0

您需要包括類路徑使用-cp參數 –

回答

1

當試圖將類文件夾之外運行您的程序,類路徑設置中,你的.class文件所在的目錄:

java -cp averageAmpCov/src averageAmpCov 

現在,你不會得到一個NoClassDefFoundError。類路徑是Java查找要加載並運行的.class文件的位置。類名參數必須是實際的類名,不涉及任何目錄。

+0

如果OP做到這一點,他/她將獲得的第一個錯誤(參數「中」和「出」需要)。 –

+0

@EtienneMiret誠然,但這不是OP詢問的問題;這是需要修復的'NoClassDefFoundError'。 – rgettman

+0

確實。我誤解了這個問題。抱歉。 –

-2

運行,這是好的

的Java averageAmpCov/src目錄/ averageAmpCov

,但我想ü忘了把UR設置CLASSPATH類路徑第一

+1

不,事實並非如此。 java不採用目錄名稱,而是類名。 – Ingo

+0

請檢查您的拼寫。 –

0

要正確使用java,你應確保:

  1. 您使用的主類的完全限定類名。
  2. 主類應該在類路徑中。

類路徑可以以3種方式進行設置:

  1. 它可以將環境變量CLASSPATH內進行設定。
  2. 使用選項-cp將覆蓋CLASSPATH
  3. 如果您不使用,那麼當前目錄是類路徑。

注意,如果文件的結構如下:

bin - 
    | 
    com - 
     | 
     mypackage - 
        | 
        Hello.class 

Hello的包名是com.mypackage,那麼下面的命令應該工作:

java -cp C:\projects\myprojct\bin com.mypackage.Hello 

另外,您可以cdC:\projects\myprojct\bin,只需使用:

java com.mypackage.Hello