【问题标题】:Drools Android IntegrationDrools Android 集成
【发布时间】:2017-07-27 07:14:44
【问题描述】:

我正在研究 android 中的 drools 实现,遇到了一个问题

java.lang.RuntimeException:无法启动活动 ComponentInfo{com.decurtis.drooldemo/com.decurtis.drooldemo.MainActivity}:java.lang.RuntimeException:无法为类 'org.drools.android.DexPackageClassLoader 实例化对象' 带有构造函数 public org.drools.android.DexPackageClassLoader(org.drools.core.rule.JavaDialectRuntimeData,java.lang.ClassLoader) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 原因:java.lang.RuntimeException:无法使用构造函数 public org.drools.android.DexPackageClassLoader(org.drools.core.rule.JavaDialectRuntimeData,java.lang.ClassLoader)为类“org.drools.android.DexPackageClassLoader”实例化对象) 在 org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:272) 在 org.drools.core.rule.JavaDialectRuntimeData.makeClassLoader(JavaDialectRuntimeData.java:618) 在 org.drools.core.rule.JavaDialectRuntimeData.onAdd(JavaDialectRuntimeData.java:243) 在 org.drools.compiler.rule.builder.dialect.java.JavaDialect.(JavaDialect.java:187) 在 org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91) 在 org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectRegistry(KnowledgeBuilderConfigurationImpl.java:392) 在 org.drools.compiler.compiler.PackageRegistry.(PackageRegistry.java:55) 在 org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newPackage(KnowledgeBuilderImpl.java:1571) 在 org.drools.compiler.builder.impl.KnowledgeBuilderImpl.initPackageRegistry(KnowledgeBuilderImpl.java:1044) 在 org.drools.compiler.builder.impl.KnowledgeBuilderImpl.createPackageRegistry(KnowledgeBuilderImpl.java:1015) 在 org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.initPackageRegistries(CompositeKnowledgeBuilderImpl.java:297) 在 org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:116) 在 org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105) 在 org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244) 在 org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64) 在 org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230) 在 org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198) 在 com.decurtis.drooldemo.MainActivity.kieExecute63(MainActivity.java:81) 在 com.decurtis.drooldemo.MainActivity.onCreate(MainActivity.java:41) 在 android.app.Activity.performCreate(Activity.java:6662) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Constructor.newInstance0(本机方法) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:430) 在 org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:270) 在 org.drools.core.rule.JavaDialectRuntimeData.makeClassLoader(JavaDialectRuntimeData.java:618) 在 org.drools.core.rule.JavaDialectRuntimeData.onAdd(JavaDialectRuntimeData.java:243) 在 org.drools.compiler.rule.builder.dialect.java.JavaDialect.(JavaDialect.java:187) 在 org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91) 在 org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectRegistry(KnowledgeBuilderConfigurationImpl.java:392) 在 org.drools.compiler.compiler.PackageRegistry.(PackageRegistry.java:55) 在 org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newPackage(KnowledgeBuilderImpl.java:1571) 在 org.drools.compiler.builder.impl.KnowledgeBuilderImpl.initPackageRegistry(KnowledgeBuilderImpl.java:1044) 在 org.drools.compiler.builder.impl.KnowledgeBuilderImpl.createPackageRegistry(KnowledgeBuilderImpl.java:1015) 在 org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.initPackageRegistries(CompositeKnowledgeBuilderImpl.java:297) 在 org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:116) 在 org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105) 在 org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:244) 在 org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:64) 在 org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:230) 在 org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198) 在 com.decurtis.drooldemo.MainActivity.kieExecute63(MainActivity.java:81) 在 com.decurtis.drooldemo.MainActivity.onCreate(MainActivity.java:41) 在 android.app.Activity.performCreate(Activity.java:6662) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 在 android.app.ActivityThread.-wrap12(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String java.io.File.getAbsolutePath()” 在 org.drools.android.MultiDexClassLoader.(MultiDexClassLoader.java:70) 07-27 04:43:48.294 16631-16631/com.decurtis.drooldemo E/AndroidRuntime: 在 org.drools.android.DexPackageClassLoader.(DexPackageClassLoader.java:44)

代码:我正在使用 drools 6.5.0 版本并出现上述错误。

KieServices   ks  = KieServices.Factory.get();
    KieRepository kr  = ks.getRepository();
    KieFileSystem kfs = ks.newKieFileSystem();
    kfs.write(ResourceFactory.newClassPathResource("rules/Fire.drl", Fire.class));
    KieBuilder kb = ks.newKieBuilder(kfs);
    kb.buildAll(); // kieModule is automatically deployed to KieRepository if successfully built.
    if (kb.getResults().hasMessages(Message.Level.ERROR)) {
        throw new RuntimeException("Build Errors:\n" + kb.getResults().toString());
    }

    KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId());

    KieSession kSession = kContainer.newKieSession();

    System.out.println("Fire All Rules...");
    kSession.fireAllRules();
    kSession.dispose();

有没有人遇到过这个错误,请帮我解决一下?

【问题讨论】:

    标签: android drools kie


    【解决方案1】:

    对于上述异常,将 Janino 添加到您的类路径中。

    展示: drools-android 使用的依赖项似乎只在 API 级别 21 之前有效。发布到他们需要的本机 API 已被 Android 阻止。您可以在装有 Android 5.1 的手机上测试此应用程序,它应该可以工作。发帖说我也在寻找解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多