首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >机器人中的Drools (JavafxPorts)

机器人中的Drools (JavafxPorts)
EN

Stack Overflow用户
提问于 2015-12-11 02:17:36
回答 1查看 219关注 0票数 0

我创建了一个简单的JavaFX应用程序来部署在Android上。我试图在我的应用程序中执行Drools,但是出现了一个预期的错误:

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

谁能告诉我怎么解决这个问题吗?

下面是代码:

代码语言:javascript
复制
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();
         }
    }     
}

--我使用以下代码执行它:

代码语言:javascript
复制
TestReports.main(null);
EN

回答 1

Stack Overflow用户

发布于 2016-08-11 16:57:30

这可能看起来很奇怪,但这个问题可能取决于您使用的Drools库的哪个版本。例如,我使用了来自本站的JAR(遵循教程)。本教程是为桌面Drools应用程序编写的,当我尝试将这些罐子移到我的Android项目时,我得到了java.lang.NullPointerException: parentLoader == null && !nullAllowed。所以我找到了另一个例子 (你可以在这里找到它:Drools (专家系统)与Android项目的集成),并从那里取出了罐子。这使得错误不再出现。确切地说,这个例子并不完美,因为它不像我所希望的那样起作用,但它可能对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34215098

复制
相关文章

相似问题

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