2012-10-08 109 views
1

我試圖從Windows命令行運行一個非常簡單的一個類「Hello World」程序。從Windows命令行執行java程序失敗

.java文件位於「C:\ Users \ UserName \ Desktop \ direcName」。該包爲deem,類名爲test

我可以cd到目錄,並從那裏使用javac test.java進行編譯,這工作得很好。然而,當我嘗試使用運行它。

java testjava -classpath directory testjava -cp . test 它會拋出「異常的線程mainjava.lang.NoClassDefFoundError: test (wrong name: deem/test)

如果我用java deem.test它說:Error, could not find or load main class deem.main

如何解決例外,並讓我的程序運行?

謝謝

+1

可以請分享'測試'源代碼... – MadProgrammer

+0

你可以cd到哪個目錄?請描述您正在使用的目錄結構。 –

回答

1

如果該類位於「認爲」的包中,那麼您需要像這樣包含包名。

java deem.test 

這應該工作。

+0

有人在這個問題中提到他嘗試過,但它不起作用。 –

+0

它不起作用。當我這樣做時,它找不到課程。 –

+0

還要確保在你的測試類中有'public static void main(String args [])'方法 – MadProgrammer

5

這是從命令行運行Java程序的「常見初學者錯誤」的變體。

java test or java -classpath directory test or java -cp . test it throws "Exception in thread main java.lang.NoClassDefFoundError: test (wrong name: deem/test).

的JVM實際上是告訴你,找到了「的Test.class」搜索路徑上,但是當它讀取類文件,它的結論是,該文件應該一直處於」 ./deem/test的.class」或‘目錄/認爲/的Test.class’......這取決於‘-cp’/‘-classpath’的說法,你實際上使用

If I use java deem.test it says: Error, could not find or load main class deem.main

現在這是告訴你它找不到「認爲/ main.class」。

請注意,您現在有告訴它尋找名爲「deem.main」的類而不是「test」或「deem.test」。 (也許你只是轉錄一些錯誤存在。)

規則真的相當簡單:

  1. 你必須把完全合格類名java作爲選項後的第一個參數。 (簡單的類名。「.class」的文件名。入口點方法的名稱。)
  2. 您必須指定類路徑使得java命令
    • 將類名映射到類文件的相對路徑名(例如foo.bar.baz.MyClass映射到foo/bar/baz/MyClass.class)...
    • 然後根據其中一個類路徑條目解析相對路徑;例如如果.是類路徑,那麼./foo/bar/baz/MyClass.class
  3. 該類必須具有所需的public static void main(String[])入口點方法。

所以IF ...

  1. 類的完全限定類名是deem.test;即test類是在包deemAND
  2. 相應的類文件是在./deem/test.classAND
  3. 它所需的條目點的方法,AND
  4. 測試應用不依賴於其他類的您或第三方庫的...

THENjava -cp . deem.test SH會工作。

+0

+1,說得好.. –