Re: [問題] package 與 classpath 的問題

看板java作者 (IWH68S0XZ8M89)時間16年前 (2008/04/23 00:42), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《sawfish (板釘龍史)》之銘言: : 《 Case 2 》 : 我將 myTest.java 放在 e:\myJava\myTest 下,編譯的方法如同 case 1,一樣可以 : 正確編譯,但是在執行時,使用 case 1 的方法確不行執行,並出現以下的錯誤: : Exception in thread "main" java.lang.NoClassDefFoundError: myTest <del> : 我一直找不出個所以然,後來我參考了其它書本,修改了一個小地方,就能順利執行了。 : 原本在 case 1 中執行的方法我改成了 : java -cp e:\myJava; myTest : 只是加了一個分號,就可以執行了,我對這個問題一直很疑惑,想請教板眾,希望能為 : 我解答一下。 : 我所使用的是 1.6.0_05 這個版本。 我試了一下的結論是 執行時會由你所指定的classpath下去搜所要執行的class 如果有指定且沒有包含當前工作目錄就不會去找當前工作目錄 就你的例子來說 Case 1是這樣: e:\myJava\ ←classpath在這裡 |--myTest.class |--myData |--math |--CBox.class 於是jvm就會在e:\myJava下面找myTest去跑 Case 2則是: e:\myJava\ ←classpath在這裡 |--myTest |--myTest.class |--myData |--math |--CBox.class jvm一樣在e:\myJava下面去找myTest 發現找不到 但因為你沒說要在工作目錄找 jvm就沒去找 直接噴一個NoClassDefFoundError出來 你可以試著在Case 2的情形下放一個內容稍有不同的myTest.class在e:\myJava\ 再在myTest\下用Case 2的方法去跑 會發現執行到的是在e:\myJava\的那一個 而這個解決方法是因為classpath指定是用;分開各個選項 所以你後來那個就成了"指定classpath為(依序) e:\myJava\ 和 (空)" 這個(空)就被解釋成 . 也就是當前工作目錄 所以就找到了 -- 上兩行我加了(依序)兩個字 因為jvm是依照這順序去找class 也就是說 在上面我寫的那個Case 2'的情形下 用 java -cp e:\myJava\; myTest 和用 java -cp ;e:\myJava\ myTest 兩個執行到的myTest是不同個 前一個是執行e:\myJava\那個 後一個是當前工作目錄那一個(ie. myJava\myTest\那個) -- ˊ_▂▃▄▂_ˋ. ◣          ▅▅ ▅▅ ι●╮   ./◤_▂▃▄▂_◥ \'▊   HARUHI █████ <■┘   ◤◤◥█◥◥█Δ   ISM    By-gamejye ¢|\   ▌▌ζ(▏●‵◥′●)Ψ ▏           █    ⊿Δ    /|▋ |\ ▎         ハルヒ主義      ▄█ ◥◥|◣ ‵′ ◢/'◢◢S.O.S 世界をいに盛り上げるための宮ハルヒの    -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.84

04/23 08:10, , 1F
謝謝您的回答,果然真如您所說的那樣子,真是解答疑惑。
04/23 08:10, 1F
文章代碼(AID): #183XMJin (java)
文章代碼(AID): #183XMJin (java)