目录:
- 1. 概述
- 2. 程序数据集加载慢或者卡死
- 3. 程序数据集获取不到参数
- 4. 设计器使用程序数据集报错缺少tools
- 5. 程序数据集预览数据中文乱码或者过滤无数据
- 6. 报错:java.lang.NoClassDefFoundError
- 7. 报错:Could not initialize class com.fr.web.Oldweblet
- 8. 报错:Illegal character in path at index
- 9. 获取不到程序数据集里传入的参数
- 10. 程序数据集超时后反复调用
- 11. 报错:java.lang.reflect.UndeclaredThrowableException
- 12. 报错:java.lang.ArrayIndexOutOfBoundsException
1. 概述编辑
本文主要提供了程序数据源在使用中遇到的问题以及解决方案。
2. 程序数据集加载慢或者卡死编辑
原因分析:
没有做初始化只执行一次的判断
解决方案:
因为 getValueAt() 方法里面调用了 init() 方法导致执行次数太多后台卡住预览不了数据,正确修改如下:
public void init() {
// 确保只被执行一次
if (valueList != null) {
return;
}
3. 程序数据集获取不到参数编辑
原因分析:
获取参数的接口位置写错,未放到 int 初始化中
解决方案:
一般包含从数据源读取数据,及后续的处理–从各种类型转换成二维数组,在 getRowCount() 和 getValueAt() 方法中被调用以获取行数和值。例如:
public void init() {
// 确保只被执行一次
if (valueList != null) {
return;
// 获取参数
String parameter0 = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString();
}
4. 设计器使用程序数据集报错缺少tools编辑
原因分析:
程序运行时用到 tools 包,程序运行找不到此包
解决方案:
在 FineReport_11.0\lib 和 FineReport_11.0\webapps\webroot\WEB-INF\lib 底下都放入 tools 包。
5. 程序数据集预览数据中文乱码或者过滤无数据编辑
原因分析:
数据库编码与设计器编码不一致导致(优先保证代码单独执行可以正常取数)
解决方案:
方案一:修改设计器的编码,修改设计器启动参数,在 %FR_HOME%bin\designer.vmoptions 文件中添加参数:-Dfile.encoding=UTF-8
方案二:修改数据连接的编码
6. 报错:java.lang.NoClassDefFoundError编辑
7. 报错:Could not initialize class com.fr.web.Oldweblet编辑
问题描述:
启动工程,catalina.out打印出报错Could not initialize class com.fr.web.Oldweblet,模板显示空白。
原因分析:
版本升级或者版本不一致导致无法初始化类。
解决方案:
对于不同版本的FR接口是有所变化的,修改对应代码重新编译即可。
8. 报错:Illegal character in path at index编辑
问题描述:
参数刷新不出来或者报错 java.lang.IllegalArgumentException:Illegal character in path at index
原因分析:
1)因为程序数据集class里自己定义了参数, 跟界面冲突, 出于兼容原因, 优先选择使用class里设置的:。
2)远程设计情况下本地没有对应程序数据集。
解决方案:
1)删掉程序数据集class里的参数, 直接用界面上的. 代码中不去setParameter, 直接getParameter即可. (程序数据集界面参数需要手动添加,无法自动识别)
2)本地和服务器上都要放class文件。
9. 获取不到程序数据集里传入的参数编辑
问题描述:
Object[] paramArray = parameters.get().toArray();通过这种方式获取参数,是个空数组,结果获取不到程序数据集里传入的参数
原因分析:
程序数据集获取不到参数,编写错误。
解决方案:
把获取参数的接口写到int初始化中。
10. 程序数据集超时后反复调用编辑
原因分析:
程序数据源超时或者数据为空的时候,会控制台反复调用,导致数据库崩掉。
解决方案:
定义静态变量并对每个方法做判断初始化
11. 报错:java.lang.reflect.UndeclaredThrowableException编辑
问题描述:
设计器端一般报错为:java.lang.reflect.UndeclaredThrowableException
设计器fanruan.log日志里面报错:Caused by: java.io.NotSerializableException
原因分析:
程序数据集类的属性存在不可序列化的属性
解决方案:
一般是直接把不可序列化的属性去掉,在取数方法里面生成,或者加 transient修饰,被 transient 修饰的属性代表不参与序列化,或者将属性替换成可序列化的属性。
12. 报错:java.lang.ArrayIndexOutOfBoundsException编辑
问题描述:
程序数据集预览报错:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
原因分析:
程序数据集取数时手动添加的参数,
如果多于代码里面使用的参数则正常
如果少于代码里面使用的参数则会报错数组越界
解决方案:
程序数据集创建的参数数量应跟代码里定义的参数一致