首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >com.sun.jdi.connect.IllegalConnectorArgumentsException -- java.lang.ClassNotFoundException:

com.sun.jdi.connect.IllegalConnectorArgumentsException -- java.lang.ClassNotFoundException:
EN

Stack Overflow用户
提问于 2017-04-26 06:58:45
回答 1查看 457关注 0票数 1

我第一次尝试使用Javassist,而且我被困住了。我在运行时创建类,如果有新的字段出现,我想在运行时更改类。我的代码在下面

代码语言:javascript
复制
public static Class generate(String className, Map<String, Class<?>>  properties) throws NotFoundException,
CannotCompileException, ClassNotFoundException {

    ClassPool pool = ClassPool.getDefault();
    CtClass cc=null;
    final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
    if (contextClassLoader != null)
    {
        pool.insertClassPath(new LoaderClassPath(contextClassLoader));
    }
    try{

        cc = pool.makeClass(className); 
        cc.defrost();
        cc.addInterface(resolveCtClass(Serializable.class));
        for (Entry<String, Class<?>> entry : properties.entrySet()) {
            //add feilds

            // add getter

            // add setter


        }
        cc.addConstructor(generateConstructor(cc,properties,className));
        CtConstructor defaultCons=new CtConstructor(NO_ARGS, cc);
        defaultCons.setBody(";");
        cc.addConstructor(defaultCons);
        return cc.toClass();
    }catch(Exception e){
        cc = pool.get(className);   
        for (Entry<String, Class<?>> entry : properties.entrySet()) {
            try{
                //add feilds
                // add getter

                // add setter

            }catch(Exception e1){
                System.out.println("Fields or method already present");

            }
        }
        try{
            cc.addConstructor(generateConstructor(cc,properties,className));
        }catch(Exception e1){
            System.out.println("Constructor already present");

        }
        try {
            byte[] classFile = cc.toBytecode();
            HotSwapper hs = new HotSwapper(9080);
            hs.reload(className, classFile);
        } catch (IOException | IllegalConnectorArgumentsException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return Class.forName(className);


    } 

这段代码不起作用。我的错误越来越少

com.sun.jdi.connect.IllegalConnectorArgumentsException :java.lang.ClassNotFoundException

EN

回答 1

Stack Overflow用户

发布于 2019-04-13 13:57:46

必须向项目中添加以下依赖项

代码语言:javascript
复制
  <!-- https://mvnrepository.com/artifact/com.sun/tools -->
    <dependency>
        <groupId>com.sun</groupId>
        <artifactId>tools</artifactId>
        <version>1.7.0.13</version>
        <!--<scope>system</scope>-->
    </dependency>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43627108

复制
相关文章

相似问题

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