Слюни в Android (JavafxPorts)

Я создал простое приложение 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);

person The Well    schedule 11.12.2015    source источник
comment
Какой номер строки, где выдается исключение?   -  person Acapulco    schedule 11.12.2015
comment
Как вы запускаете свое приложение? Используете ли вы обычный файл build.gradle? Предполагается, что ваш класс является частью приложения JavaFX, и вы можете вызывать его в любой момент, но не с помощью метода main...   -  person José Pereda    schedule 11.12.2015
comment
Есть ли у вас какие-либо идеи о том, как решить эту проблему?   -  person The Well    schedule 14.12.2015


Ответы (1)


Это может показаться странным, но эта проблема может зависеть от того, какую версию набора библиотек Drools вы используете. Например, я использовал файлы JAR из этот сайт (после этого руководства). Учебник был написан для настольного приложения Drools, и когда я попытался переместить некоторые из этих JAR-файлов в свой проект Android, я получил java.lang.NullPointerException: parentLoader == null && !nullAllowed. Поэтому я нашел другой пример (вы можете найти его здесь: Интеграция Drools (Экспертная система) с проектами Android) и взял оттуда JAR . Из-за этого ошибка перестала появляться. Если быть точным, этот пример не идеален, поскольку он не работает так, как мне бы хотелось, но он может вам помочь.

person user3855877    schedule 11.08.2016