簡體   English   中英

在編譯時在類路徑上找到類,但在運行時找不到類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM