首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >btrace和java.lang.NoSuchMethodError的奇怪之处

btrace和java.lang.NoSuchMethodError的奇怪之处
EN

Stack Overflow用户
提问于 2017-11-13 04:09:30
回答 1查看 115关注 0票数 0

主修班:

代码语言:javascript
复制
package com.xxx.yyy;

public class Hello{
    public static void main(String[] args){
        A a = new A();
        while(true){
            try {
                a.execute(1000);
                Thread.sleep(1000);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

A类:

代码语言:javascript
复制
package com.xxx.yyy;

public class A{
    public void execute(int sleepTime) throws Exception {
        System.out.println("sleep time is "+sleepTime); 
    }
}

btrace脚本:

代码语言:javascript
复制
import static com.sun.btrace.BTraceUtils.println;  
import static com.sun.btrace.BTraceUtils.str;  
import static com.sun.btrace.BTraceUtils.strcat;  
import static com.sun.btrace.BTraceUtils.timeMillis;  

import com.sun.btrace.annotations.BTrace;  
import com.sun.btrace.annotations.Kind;  
import com.sun.btrace.annotations.Location;  
import com.sun.btrace.annotations.OnMethod;  
import com.sun.btrace.annotations.ProbeClassName;  
import com.sun.btrace.annotations.ProbeMethodName;  
import com.sun.btrace.annotations.TLS;
@BTrace
public class BtraceTest{

    @OnMethod(clazz="com.xxx.yyy.A",method="execute",location=@Location(Kind.RETURN))
    public static void traceExecute(@ProbeClassName String name,@ProbeMethodName String method,int sleepTime){
        println(strcat("the class name=>", name));  
        println(strcat("the class method=>", method));  
        println(strcat("the class method params=>", str(sleepTime)));
    }
}

一切都很好。但是:当我将行Thread.sleep(1000)移到A类的execute函数时,如下所示:

代码语言:javascript
复制
package com.xxx.yyy;

public class A{
    public void execute(int sleepTime) throws Exception {
        System.out.println("sleep time is "+sleepTime); 
        Thread.sleep(1000);
    }
}

NoSuchMethodError是由Hello抛出的。

代码语言:javascript
复制
Exception in thread "main" java.lang.NoSuchMethodError: com.xxx.yyy.A.$btrace$BtraceTest$traceExecute(Ljava/lang/String;Ljava/lang/String;I)V
    at com.xxx.yyy.A.execute(Unknown Source)
    at com.xxx.yyy.Hello.main(Hello.java:8)

我的环境是

java版本"1.8.0_121“ BTrace诉1.3.9 (20170111)

谁能解释原因?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-13 04:54:22

我认为你的课应该是implements Runnableextends Thread。然后,只有您可以在您的程序中使用startsleep和类似的方法。看看这里,了解如何实现线程方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47256932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档