【问题标题】:Drools in Android (JavafxPorts)Android 中的流口水 (JavafxPorts)
【发布时间】:2016-08-12 00:57:30
【问题描述】:

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

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

谁能告诉我如何解决这个问题?

代码如下:

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();
         }
    }     
}

我使用以下代码执行它:

TestReports.main(null);

【问题讨论】:

  • 抛出异常的行号是多少?
  • 您的应用运行情况如何?您使用常规的build.gradle 文件吗?您的类应该是 JavaFX 应用程序的一部分,您可以随时调用它,但不能使用 main 方法...
  • 你知道如何解决这个问题吗?

标签: java android javafx-8 javafxports


【解决方案1】:

这可能看起来很奇怪,但这个问题可能取决于您使用的 Drools 库集的版本。例如,我使用了来自 this site 的 JAR(遵循 this 教程)。该教程是为桌面 Drools 应用程序编写的,当我尝试将其中的一些 JAR 移动到我的 Android 项目时,我得到了java.lang.NullPointerException: parentLoader == null && !nullAllowed。所以我找到了another example(你可以在这里找到它:Integration of Drools (Expert System) with Android Projects)并从那里拿走了JAR。这使错误停止出现。确切地说,这个例子并不完美,因为它不能像我希望的那样工作,但它可能对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多