[英]Class is found on class path when compiling, but not when running
我編寫了一個Java類,該類實現了在另一個目錄中指定的接口。 我這樣編譯應用程序:
javac ArrayQueue.java -cp QueueArray
ArrayQueue
類在目錄QueueArray
實現接口Queue
。 沒有指定的類路徑,編譯器將按預期引發錯誤。
但是,此后運行程序時,它不再找到該類:
java ArrayQueue -cp QueueArray
Exception in thread "main" java.lang.NoClassDefFoundError: Queue
可能是什么原因造成的?
編輯:如果我將.class
文件復制到ArrayQueue.class
目錄,則該程序運行正常。
這可能會有幫助。 從JLS,第3版 :
Java平台的實現必須至少支持一個未命名的程序包。 它可能支持多個未命名程序包,但並非必須如此。 每個未命名包中的編譯單元由主機系統確定 。
在使用分層文件系統存儲程序包的Java平台的實現中,一種典型的策略是將未命名的程序包與每個目錄相關聯。 一次只能觀察到一個未命名的程序包,即與“當前工作目錄”關聯的程序包。 “當前工作目錄”的確切含義取決於主機系統。
您正在使用的JVM似乎不支持默認程序包,除非它們與當前目錄(也就是您從中啟動自定義隊列類的目錄)相關聯。
通常,使用默認軟件包是一個壞主意,我的建議是將兩個類與一個軟件包相關聯,重新編譯並重新測試您的代碼。
使用java -classpath . class_having_main_method
java -classpath . class_having_main_method
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.