Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javaagent命令时解决java.lang.NoClassDefFoundError异常_Java_Eclipse_Instrumentation_Javaagents - Fatal编程技术网

使用javaagent命令时解决java.lang.NoClassDefFoundError异常

使用javaagent命令时解决java.lang.NoClassDefFoundError异常,java,eclipse,instrumentation,javaagents,Java,Eclipse,Instrumentation,Javaagents,我想计算我创建的对象(名为TreapDS的包中的Treap)的内存使用情况。我发现我需要遵循以下步骤中的一个。我总是使用Eclipse,因此我不熟悉使用命令运行Java代码。我在中问了一个问题:如何基于该页面构建jar文件,但我没有得到任何答案。这是我的包的层次结构: Indexing | --- bin |---- MemoryUsage | -- mainfest.MF | -- Myagent | --- src |-

我想计算我创建的对象(名为TreapDS的包中的Treap)的内存使用情况。我发现我需要遵循以下步骤中的一个。我总是使用Eclipse,因此我不熟悉使用命令运行Java代码。我在中问了一个问题:如何基于该页面构建jar文件,但我没有得到任何答案。这是我的包的层次结构:

Indexing
| --- bin
|---- MemoryUsage
              | -- mainfest.MF
              |  -- Myagent
| --- src
       |--- treapDS
       |      |--- Treap
       |---- MemoryUsage
              | -- TestCase
              |  -- Myagent
我可以在这个地址运行命令的基础上创建一个jar文件

Indexing/bin$ jar -cmf MemoryUsage/manifest.MF agent.jar MemoryUsage/MyAgent.class
它在bin文件夹中创建agent.jar,当我提取这个jar文件时,它包含两个文件夹MemoryUsage,其中包含Myagent.class和包含MANIFEST.MF的META-INF文件夹

但是当我运行下面的命令时,我得到了异常,我不知道如何通过提到Treap的地址来解决它。有没有办法用eclipse实现这一点

/Indexing/bin$ java -javaagent:agent.jar -cp MemoryUsage/TestCase

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.NoClassDefFoundError: treapDS/Treap
    at MemoryUsage.MyAgent.premain(MyAgent.java:9)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: treapDS.Treap
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 7 more
FATAL ERROR in native method: processing of -javaagent failed
Aborted (core dumped)

我读了这些页面,但我无法解决我的问题。

这是因为
treapDS
treapDS
不同。类名区分大小写!堆栈跟踪非常清楚:类加载器试图加载
treapDS.Treap
而不是
treapDS.Treap
,前者不存在

修复您的源代码并重新编译,使其到处都有正确的区分大小写的拼写,它应该消失


第一次“编译所有内容”的原因大概是因为您在操作系统上开发时没有正确的区分大小写的文件路径。

这是因为
treapDS
treapDS
不同。类名区分大小写!堆栈跟踪非常清楚:类加载器试图加载
treapDS.Treap
而不是
treapDS.Treap
,前者不存在

修复您的源代码并重新编译,使其到处都有正确的区分大小写的拼写,它应该消失


第一次“编译所有内容”的原因大概是因为您在没有正确区分大小写的文件路径的操作系统上开发。

@Mike Samuel@user268396在我的代码的所有部分中,包的名称都是treapDS。我把它写错了;很抱歉。如何准备区分大小写的文件路径?@Mike Samuel@user268396在我的代码的所有部分中,包的名称都是treapDS。我把它写错了;很抱歉。如何准备区分大小写的文件路径?