2013-05-04 123 views
-3

我被給了一大塊未完成的代碼,我的任務是完成它。然而,我的講師告訴我原始的未完成的代碼應該運行,但它沒有。我將它們編入.class文件,但是當我輸入「java的DirectoryLister驅動程序GUI」,我得到運行java程序錯誤「線程」main「中的異常」java.lang.NoClassDefFoundError:Driver「

http://imgur.com/cuN9Ea8 

我完全新到Java,我只是以往的經驗是C. 我編過這三個文件GUI.java, directoryLister.java, and Driver.java

javac GUI.java DirectoryLister.java Driver.java 

在一起,現在我在同一目錄中有三個.class文件,但是當我做

java DirectoryLister Driver GUI 

我得到上述錯誤。幫幫我!

+0

可以請你發佈完整的堆棧跟蹤 – Satya 2013-05-04 03:01:53

+0

我不知道這意味着什麼...... Thread.currentThread()。的getStackTrace()是正確的軌道上? 但我只是堅持在我的代碼中的某個地方? – 2013-05-04 03:05:10

+0

你能否粘貼所有錯誤 – Satya 2013-05-04 03:06:02

回答

2

當您運行java時,您必須爲其提供一個類才能運行,而不是三個。該類將執行main方法。您必須從編譯類的根目錄運行java,並且必須使用完全限定的類名稱(即包含程序包)。

例如,如果您有源文件夾src,其中包含源文件./a/b/C.java,則該類將編譯爲src/a/b/C.class。然後你會確定你在src並運行java a.b.C

+0

主要方法是在driver.class中,當我「java driver」出現同樣的錯誤時 http://imgur.com/G3fciJw – 2013-05-04 03:10:06

+0

@JeffreyShin:所有的Java標識符區分大小寫。如果你的類是'Driver',那麼你需要使用'java driver'而不是'java driver'。但似乎你有另一個問題。你可以顯示「驅動程序」的第一位嗎?它看起來像在'directoryLister.template'包中聲明的,但是你正在編譯並運行它,就好像它沒有包一樣。您可能需要將其放在'directoryLister/template/Driver.java'路徑中,並使用'java directoryLister.template.Driver'運行它。 – 2013-05-04 03:10:55

+0

http://imgur.com/7eQQHLm – 2013-05-04 03:50:07

1

從這些錯誤看來它是一個包問題。

首先,您不能在多個文件上運行java,因爲java會將後者名稱作爲命令行參數傳遞。

其次,在DirectoryLister.java的頂部,你應該看到

package directoryLister.template; 

這意味着完全合格的名稱的Java類的directoryLister.template.DirectoryLister。完全限定名基本上是完整的類名,包括它所在的包。包是文件系統上同一目錄中的類的分組。

java的設置方式,可以從任何工作目錄編譯java源文件。然而,在一個類文件運行java是非常嚴格的:

  • 如果源文件是在包foo.bar,類文件所在的目錄必須叫做foo /酒吧/。
  • java必須從包層次結構的根目錄運行。如果一個類文件位於myjavafiles/foo/bar /中,並位於包foo.bar中,則在運行java時,必須將myjavafiles作爲當前工作目錄。
  • Java必須傳遞類的完全限定名稱,因爲如果兩個類位於不同的包中,它們可以具有相同的名稱。這意味着你必須運行java directoryLister.template.DirectoryLister或任何包含你的主類的類。
  • 請注意上述語句中的句點,而不是斜槓。然而,javac需要斜槓。
  • 請注意,只要它們在正確的位置,java就會找到其他類文件,您不必將它們作爲參數傳遞給java
  • 另請注意,javac沒有這些嚴格限制,因爲java

See here for more info on Fully Qualified names.

+0

這是固定它,非常感謝你! – 2013-05-04 04:06:50

+0

@JeffreyShin:不要忘記註冊並接受這個答案。 – 2013-05-04 04:34:18

相關問題