1

我有一个目录结构“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.lang.NoclassDefFoundError AgentMain/java 中给了我异常,并说找不到主类 AgentMain.java

这里有什么问题?

4

4 回答 4

2

您正在尝试执行源文件 (AgentMain.java) 而不是类。确保您已使用 javac 编译 AgentMain,然后删除.java文件扩展名。

根据评论中的讨论进行更新:由于您的 AgentMain 类在编译类后定义在名为“main”的包中,因此其相应的类文件必须位于名为“main”的目录中。

因此,如果您使用包含的命令从“d:\workspace 2\project\lib”目录运行,则编译后的类需要位于 d:\workspace 2\project\lib\main\AgentMain.class

于 2011-11-17T15:23:26.570 回答
1

你不能运行.java文件,你需要先编译它们javac,然后运行编译后的代码(.class文件)。在您的示例中,您必须运行

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

进而

java -javaagent:myagent.jar -cp asm-all-3.3.jar;. AgentMain
于 2011-11-17T15:22:08.300 回答
1

您应该引用已编译的 .class 文件,而不是 .java 文件

于 2011-11-17T15:23:23.880 回答
1

java 不解释源文件。

您必须先编译 AgentMain.java javac。然后你必须AgentMain在命令行上指定而不是AgentMain.java.

于 2011-11-17T15:23:33.937 回答