2017-07-27 60 views
1

我的工作在Android的Drools的實施,停留在一個問題Drools的Android的整合

了java.lang.RuntimeException:無法啓動活動ComponentInfo {com.decurtis.drooldemo/com.decurtis.drooldemo.MainActivity }:java.lang.RuntimeException:無法使用構造函數public org.drools.android.DexPackageClassLoader(org.drools.core.rule.JavaDialectRuntimeData,java.lang.ClassLoader)實例化類org.drools.android.DexPackageClassLoader的對象。 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com。 android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 引起:java.lang.RuntimeException:無法爲cla實例化對象使用構造函數public org.drools.android.DexPackageClassLoader(org.drools.core.rule.JavaDialectRuntimeData,java.lang.ClassLoader)的org.drools.android.DexPackageClassLoader' at 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) 在有機.drools.compiler.rule.builder.dialect.java.JavaDialect。(JavaDialect.java:187) at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91) at org.drools.compiler.builder.impl.KnowledgeBuilderConfi gurationImpl.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) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowl (AbstractKieModule.java:edgeBuilderImpl.java:116) at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:105) at 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) at com.decurtis.drooldemo.MainActivity.kieExecute63(MainActivity.java:81) at com.decurtis.drooldemo。org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198) 。主要活動。onCreate(MainActivity.java:41) at android.app.Activity.performCreate(Activity.java:6662) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at 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) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :866) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 產生的原因:在java.lang.reflect.Constructor.newInstance0(本機方法java.lang.reflect.InvocationTargetException ) 在java.lang.reflect.Constructor.newInstance(Constructor.java:430) 在org.drools.core.util.ClassUtils.instantiateObject(ClassUtils.java:270) 在org.drools.core.rule.JavaDialectRuntimeData.m akeClassLoader(JavaDialectRuntimeData.java:618) at org.drools.core.rule.JavaDialectRuntimeData.onAdd(JavaDialectRuntimeData.java:243) at org.drools.compiler.rule.builder.dialect.java.JavaDialect。(JavaDialect.java :187) at org.drools.compiler.rule.builder.dialect.java.JavaDialectConfiguration.newDialect(JavaDialectConfiguration.java:91) at org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl.buildDialectRegistry(KnowledgeBuilderConfigurationImpl.java:392 ) at org.drools.compiler.compiler.PackageRegistry。(PackageRegistry.java:55) at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.newPackage(KnowledgeBuilderImpl.java:1571) at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.initPackageRegistry(KnowledgeBuilderImpl.java:1044) at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.createPackageRegistry(KnowledgeBuilderImpl.java:1015) at 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) at 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) at com.decurtis.drooldemo.MainActivity.kieExecute63(MainActivity.java:81) at com.decurtis.drooldemo.MainActivity。 onCreate(MainActivity.java:41) at android.app.Activity.performCreate(Activity.java:6662) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchAc tivity(ActivityThread。java:2599) at android.app.ActivityThread $(android.app.ActivityThread.EventThread.java:2707) android.app.ActivityThread.-wrap12(ActivityThread.java) $ H.handleMessage(ActivityThread.java :1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077 ) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:866) at com.andr oid.internal.os.ZygoteInit.main(ZygoteInit.java:756) 引發:java.lang.NullPointerException:試圖調用虛函數java.lang.String java.io.File.getAbsolutePath()'null對象引用 at org.drools.android.MultiDexClassLoader。(MultiDexClassLoader.java:70) 07-27 04:43:48.294 16631-16631/com.decurtis.drooldemo E/AndroidRuntime:at 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(); 

有沒有人遇到這個錯誤,請幫我一下?

回答

0

對於上述異常,請將Janino添加到您的類路徑中。

Imp: 看來,drools-android只使用到API級別21的依賴關係。發佈到他們需要的本地API已被Android阻止。你可以在Android 5.1版本的手機上測試這個應用程序,它應該可以工作。發佈我也在尋找解決方案