2011-11-17 102 views
0

我有一個目錄結構「D:\ workspace 2 \ project \ lib」,其中包含所有「AgentMain.java」文件(我從src中複製並將其放在此處以使它更容易),「asm-all.3.3.jar」,「myagent.jar」。現在,當我嘗試從命令提示符未找到java代理類異常

D:\workspace 2\project\lib>java -javaagent:myagent.jar -cp asm-all-3.3.jar;. AgentMain.java 

調用我的java程序這個樣子讓我異常螺紋主java.lang.NoclassDefFoundError AgentMain/java和說couldnot找到主類AgentMain.java

這裏有什麼問題?

回答

1

你試圖執行你的源文件(AgentMain.java)而不是類。確保你已經用javac編譯AgentMain,然後刪除.java文件擴展名。

根據評論的討論進行更新: 由於AgentMain類在名爲「main」的包中定義,因此一旦編譯了類,其相應的類文件必須位於名爲「main」的目錄中。所以如果你使用你包含的命令從你的「d:\ workspace 2 \ project \ lib」目錄運行,編譯後的類需要放在d:\ workspace 2 \ project \ lib \ main \ AgentMain中.class

+0

是的,現在我編譯源文件,然後用java運行它,但錯誤仍然存​​在 – SASM

+0

可以你發佈了你現在運行的確切命令以及JVM給你的錯誤? – Chris

+0

這是我的命令:java -javaagent:myagent.jar -cp asm-all-3.3.jar ;. AgentMain .....它說noclassdeffound和無法找到主類AgentMain – SASM

1

你不能運行.java文件,你需要首先用javac編譯它們,然後運行編譯後的代碼(.class文件)。在你的榜樣,你必須運行

javac -cp asm-all-3.3.jar;. AgentMain.java 

然後

java -javaagent:myagent.jar -cp asm-all-3.3.jar;. AgentMain 
+0

是的,這是我的錯誤...但結果仍然是相同的。甚至在我使用AgentMain類文件 – SASM

1

你應該引用編譯後的.class文件,而不是java文件

1

java不解釋源文件。

您必須首先使用javac編譯AgentMain.java。然後,您必須在命令行上指定AgentMain而不是AgentMain.java