2015-12-11 3 views
0

Я создал простое приложение JavaFX для развертывания на Android. Я пытался выполнить Drools в моем приложении, но там была произошла ожидаемая ошибка:Drools in Android (JavafxPorts)

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); 
+0

Что такое номер строки, в которой выбрано исключение? – Acapulco

+0

Как вы используете свое приложение? Вы используете обычный файл 'build.gradle'? Ваш класс должен быть частью приложения JavaFX, и вы можете его назвать в любой момент, но не с помощью метода 'main' ... –

+0

Есть ли у вас какие-либо идеи относительно того, как это разрешить? –

ответ

0

Это может показаться странным, но этот вопрос может зависеть от версии библиотек Drools отделил вас использовать. Например, я использовал JAR от this site (после this). Учебник был написан для настольного приложения Drools, и когда я попытался переместить некоторые из этих JAR в мой проект Android, я получил java.lang.NullPointerException: parentLoader == null && !nullAllowed. Итак, я нашел another example (вы можете найти его здесь: Integration of Drools (Expert System) with Android Projects) и взял JARs оттуда. Это заставило ошибку перестать появляться. Точнее, этот пример не идеален, так как он не работает так, как мне бы хотелось, но это может помочь вам.

Смежные вопросы