0

我找不到通过手动调用 JavaCompiler 来执行我的代理 JADE 类的方法。我正在尝试实现一个模拟器,我添加了一个导入功能,允许人们加载他们的 JADE 代理类,我会在模拟器上执行它们以提取数据。

这是导入代码:

            JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

            int result = compiler.run(null, null, null, importedClassPath);
            System.out.println("résultat de la compilation Agent JADE : " + result);

            int result2 = compiler.run(null, null, null,
                    "C:\\Users\\Administrateur\\Desktop\\RoboticsWorkspace\\RuntimeProject\\src\\AcompileJadeMain.java");

            System.out.println("résultat de la compilation MAIN : " + result2);

            File classesDir = new File(
                    "C:\\Users\\Administrateur\\Desktop\\RoboticsWorkspace\\RuntimeProject\\bin\\");
            File classesDir2 = new File(
                    "C:\\Users\\Administrateur\\Desktop\\RoboticsWorkspace\\RuntimeProject\\bin\\");

            URLClassLoader classLoader, classloader2;

            try
            {
                // Loading the class
                classLoader = URLClassLoader.newInstance(new URL[] { classesDir.toURI().toURL() });
                classloader2 = URLClassLoader.newInstance(new URL[] { classesDir2.toURI().toURL() });

                Class<?> cls, cls2;

                cls = Class.forName(importedClassname, true, classLoader);
                cls2 = Class.forName("AcompileJadeMain", true, classloader2);

                Object instanceAgent = cls.newInstance();
                Object instanceMainAgent = cls2.newInstance();

                Method call;
                try
                {
                    call = cls2.getMethod("main", String[].class);
                    String[] args = new String[0];
                    call.invoke(null, new Object[] { args });

                } catch (NoSuchMethodException | SecurityException | IllegalArgumentException
                        | InvocationTargetException e1)
                {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

            } catch (MalformedURLException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InstantiationException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

这是正在编译的主要内容:

String[] commande = new String[3];
String argument="";
argument = argument+"Robocar:ACompilJade(20,25,7,10,Est,5)";
commande[0]="-cp C:\\Users\\Administrateur\\Documents\\Eclipse_BackupProjects\\jade.jar;"
        +"C:\\Users\\Administrateur\\Desktop\\RoboticsWorkspace\\RuntimeProject\\bin ";
commande[1]="jade.boot -agents ";
commande[2]=argument;
jade.Boot.main(commande);

我尝试同时包含 JADE.rar 的路径和代理类的路径,但它仍然可以找到代理类,我收到以下错误:

找不到代理类时出错

我还将jade.rar 文件导入到我的项目的构建路径中。

4

1 回答 1

0

在我的 Java IDE 中,我通常使用以下行从类文件中启动代理。

bootOptions[n] = "FA:"+Facilitator.class.getCanonicalName();

我不确定您是否可以传递参数 this ACompilJade(20,25,7,10,Est,5)";。但是,如果可以的话,我很想知道如何。

我通常:

  1. 创建Robocar1具有属性的子类(20,25,7,10,Est,5),或
  2. 启动后将数据发送到此代理。(我知道这很痛苦,这就是为什么我对更简单的方法感兴趣)。
于 2020-07-02T00:32:35.853 回答