简体   繁体   English

Android中的Drools(JavafxPorts)

[英]Drools in Android (JavafxPorts)

I created a simple JavaFX Application to be deployed on Android. 我创建了一个简单的JavaFX Application,将其部署在Android上。 I was trying to execute Drools in my application but there was an expected error occurred: 我试图在我的应用程序中执行Drools ,但是发生了预期的错误:

java.lang.NullPointerException: parentLoader == null && !nullAllowed

Can somebody tell me how to resolve this? 有人可以告诉我如何解决吗?

Here's the code: 这是代码:

package com.rameses.waterworks.drools;

import java.util.Properties;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderConfiguration;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;

public class TestReports {


    public static void main(String[] args) throws Exception {
         Properties properties = new Properties();
         properties.setProperty( "drools.dialect.java.compiler", "JANINO" );
         KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(properties,TestReports.class.getClassLoader());
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
        kbuilder.add(ResourceFactory.newClassPathResource("test/reports/test.drl"), ResourceType.DRL);
         KnowledgeBuilderErrors errors = kbuilder.getErrors();
         if (errors.size() > 0) {
            for (KnowledgeBuilderError error: errors) {
               System.err.println(error);
            }
            throw new IllegalArgumentException("Could not parse knowledge.");
         }
         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
         kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
         StatefulKnowledgeSession ksession = null;

         try {
             ksession = kbase.newStatefulKnowledgeSession();
             ksession.insert(new SampleBean("Hello Drools!"));
             ksession.fireAllRules();
         }
         catch(Exception  e){

         }   
         finally {
             ksession.dispose();
         }
    }     
}

I executed it using the following code: 我使用以下代码执行了它:

TestReports.main(null);

It may seem strange, but this issue may depend on which version of Drools libraries set you use. 可能看起来很奇怪,但是这个问题可能取决于您使用的Drools库版本设置。 For example, I used the JARs from this site (following this tutorial). 例如,我使用了此站点中的JAR(遵循教程)。 The tutorial was written for desktop Drools application, and when I tried to move some of this JARs to my Android project, I got java.lang.NullPointerException: parentLoader == null && !nullAllowed . 该教程是为桌面Drools应用程序编写的,当我尝试将其中的一些JAR移至我的Android项目时,我得到了java.lang.NullPointerException: parentLoader == null && !nullAllowed So I found another example (you can find it here: Integration of Drools (Expert System) with Android Projects ) and took JARs from there. 因此,我找到了另一个示例 (您可以在此处找到它: Drools(专家系统)与Android Projects的集成 ),并从那里获取了JAR。 This made the error stopped appearing. 这使错误停止出现。 To be exact, this example isn't perfect as it doesn't work as I'd like it to, but it may be some help for you. 确切地说,此示例并不完美,因为它无法按我希望的那样工作,但可能会对您有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM