config.setEngineHome(birtHome.getAbsolutePath());
if (birtLog != null) {
config.setLogConfig(birtLog, Level.WARNING);
}
System.out.println("config=" +config);
Platform.startup(config);
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
System.out.println("factory=" +factory);
engine = factory.createReportEngine(config);
======================================分割线======================================
在设计BIRT报表系统的时候,调用报表引擎,但是在运行的时候,出现错误:
exception is java.lang.NullPointerException
仔细排查,发现是在这一步:
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
获取factory的时候,获取的值为空:
google了很久,发现国外很多人也出现同样的问题,有些是和平台版本有关,比如在ios,Linux上运行正常,只在windows上有错:
我也遇到同样错误,最终solution由两个:
1.去网上下载一个同样版本的birt-runtime,将其中的ReportEngine替换掉自己的工程里面的报表引擎;
2.这个方法解决了我的问题,但是不一定对其他朋友适用:
删除工程中:
ReportEngine\configuration\org.eclipse.core.runtime\.manager
目录下的所有文件。
再次运行,factory(Platform.createFactoryObject)就不为空了。