1. 概论
我们在平时的报表运行过程中会遇见各种各样的问题,下面列举了一些常见的报错信息、原因和基本解决方法。
常见的错误代码报错及解决方案请参考:错误代码汇总及解决方案
注:JAR 为 2018.4.9 及之后,不再支持 applet 打印,请使用其他打印方法。
2. 数据连接问题
2.1 找不到数据连接
问题描述:预览模板时报错:找不到数据连接
原因分析:数据连接或者数据集配置问题
解决方案:查看配置是否有问题,详情参考:通用数据连接常见问题
2.2 OPTION SQL_SELECT_LIMIT=DEFAULT
问题描述:具体报错信息:You have an error in your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1
原因分析:JDBC 在连接数据库时候会发送测试语句 SET OPTION SQL_SELECT_LIMIT=DEFAULT
这在 MySQL5.6 以下版本是可以的 ,但是 5.6 不再支持 SET.
解决方案:升级驱动到对应数据库版本即可
2.3 Cannot load JDBC driver class
原因分析:驱动问题
解决方案:查看数据库驱动是否正常. 如果确定驱动是有的, 再看 JDK 与驱动是否匹配
2.4 Cannot get a connection
问题描述:具体报错信息:Cannot get a connection,pool error Timeout waiting for idle object
原因分析:数据库连不上, 连接池满了或者超时之类的.
解决方案:点击「服务器>定义数据连接」,如下图所示,点击,弹出编辑框,调整最大活动连接数
2.5 TDS protocol stream is not valid
问题描述:具体报错信息:connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error:The TDS protocol stream is not valid
原因分析:jtds 连接 SQL Server时,SQL Server 启用了安全认证
解决方案:把客户端加到认证列表里
2.6 paged queries not supported
原因分析:当前数据库不支持分页查询行式引擎
解决方案:换个数据库比如 MySQL, SQLServer, Oracle 等等。
3. 行高列宽及分页问题
3.1 index xx,size xx
原因分析:一行的高度大于一页的高度。
解决方案:可以纵向合并单元格,使一格占多行,这样就可以把行高大于页高的单元格拆分为多行进行计算了,预览就会以多页的方式显示出来。列宽同理,一个单元格的长度不能大于一页的宽度。否则将会出现错误,可以横向合并单元格。
3.2 repeated column width is larger...
原因分析:重复列宽度大于纸宽度。
解决方案:设置小于列宽就行了。
3.3 由一个单元格扩展出来的行高不一致
原因分析:某一行内容比较多一行显示不了,就换行了,所以变宽了。
解决方案:将单元格拉宽点就好了。
3.4 空白单元格导致使其有多余的空白页
问题描述:在 H2 单元格填上数据并设置格式后,删除该单元格内容后预览,可看到本来两页的内容变成四页内容,且后两页都是空白页。
原因分析:因为当时删除单元格时,只删除了该单元格的内容,而没有删除该单元格的格式。若模板中存在多余的格式没有删除,那么对应的列或行栏中的颜色是显示为灰色的。如上图中,D、E 列为深灰色,说明这两列有多余的格式没有删除。
解决方案:当出现如上问题时,您只要选中 D、E 列所在的单元格后,右键选择「清除>全部」即可。清除全部后,可看到 D、E 的颜色会变为白色,如下图:
或直接选中 D、E 列,删除这两列也可以,如下图:
注:若出现多余行后,只要选中深灰色行所在的单元格,点击清除全部或直接删除行即可。
3.5 模板中有多余的空白sheet
问题描述:已经确定没有多余行列了,但预览时仍然出现空白页。
原因分析:可能存在多余的空白sheet,如下图所示:
解决方案:如上图红框位置,实际使用时可能新建了sheet 没有使用,或删除了 sheet 里的内容,忘记了删除 sheet,那么多余的 sheet 会在预览时,单独作为一个空白 sheet 显示出来,这时只需右击多余的 sheet 删除它即可,如下图:
3.6 行高列宽超出页面大小设置
问题描述:在预览模板出现:错误代码:11300002 行高列宽超出页面大小设置,如下图所示:
原因分析:
1)某个单元格内容很长,且设置了自动调整行高。
2)某个单元格内容很长,且设置了自动调整列宽。
3)重复标题行与列设置有问题也可能会出现上述问题。
解决方案:请参考行高列宽超出页面大小设置
4. JAR包版本问题
4.1 本地预览的效果和服务器上的效果不一样
原因分析:JAR 包存在差异或者缓存问题
解决方案:更新 JAR 包,确保开发环境和服务器平台一致正确,仍不行可重启设计器或者清空浏览器缓存。详细可参考:JAR包不匹配常见问题、本地预览效果与服务器端预览效果不一致
4.2 WcardTitleLayout cannot be cast
问题描述:具体报错信息:WcardTitleLayout cannot be cast to com.fr.form.ui.ElementCaseEditorProvider
原因分析:更新了 JAR, 没更新自适应插件。
解决方案:详细可参考:JAR包不匹配常见问题
4.3 java.lang.AbstractMethodError
原因分析:一般都是因为引擎的 JAR, 插件的 JAR, 以及设计器的 JAR, 这三者之间不同步, 不是同一个时间编译出来的.
解决方案:更新所有 JAR。详细可参考:JAR包不匹配常见问题
4.4 java.lang.NoSuchMethodError
原因分析:一般都是 JAR 包不匹配
解决方案:设计器 lib, webapps 里的 lib 以及插件三者要保持一致。
4.5 java.lang.RuntimeException- Server workspace no response
原因分析:一般都是 JAR 包不匹配
解决方案:详细可参考:JAR包不匹配常见问题
4.6 com.fr.stable.fun.Level
问题描述:具体报错信息:com.fr.plugin.record.FunctionRecordManager cannot be cast to com.fr.stable.fun.Level
解决方案:删除 plugins 目录下的老的功能点记录插件. 停止维护了。
4.7 design_open error
原因分析:远程设计, 模板打开报错, 打开一些简单的模板试试, 如果简单的可以, 只有部分不行, 考虑是不是两边jar不一致, 插件不一致。详细可参考:JAR包不匹配常见问题
5. 模板预览显示错位问题
模板预览显示错位问题较为复杂,可参考:模板预览错位排查方案 进行排查分析。
6. 内存及并发问题
6.1 address pool is full
问题描述:设计器预览模板时出现报错:address pool is full
原因分析:地址池满,连接数超过并发数上限
解决方案:在「管理系统>智能运维>系统情况」下面,看到当前系统在线用户数,然后再比较注册信息页面里的 Concurrency,
判断是否超过购买的并发数,从而选择减少并发人数或者增大最大并发数。详细可查询:address pool is full 错误处理
6.2 java heap space、stack overflow
问题描述:预览模板时报错:java heap space、stack overflow
原因分析:模板太复杂,数据量大, 堆栈溢出
解决方案:优化数据集,报表采用分页预览方式;调大服务器内存。处理方法可参考:修改内存
6.3 java.lang.OutOfMemoryError
原因分析:内存溢出了
解决方案:重启后观察,清理服务器内存。
6.4 Canot run program xx
问题描述:具体报错信息:Canot run program xx, error=12, Cannot allocate memory
解决方案:修改下 JVM 的内存配置, 初始内存调小点,详细方法可参考:FR 性能测试注意事项
6.5 Web 端访问模板, 出现 "页面排队中"
原因分析:应该是内存快满了, 防宕机插件启动 Session 排队功能了
解决方案:清理服务器内存。
7. 插件问题
7.1 Cannot connect to site server: xxx
原因分析:连不上应用商店, 不影响使用。
7.2 Class not found: JForm
原因分析:打开报表的时候出错了, 可能是因为用了某个插件而当前设计器没装该插件等等. 具体要看更详细的日志。
7.3 插件列表读取失败
原因分析:一般是因为网络原因导致连接不到商城
解决方案:直接浏览器里访问商城看看能不能访问到: https://market.fanruan.com/
8. 单元格、参数、控件设置问题
8.1 下拉复选框返回值问题
原因分析:下拉复选框控件返回值默认情况下是数组,参数取到的字符串是不带引号的(所以在数据集定义的 SQL 语句中调用字符串类型的参数的话要手动加上单引号才行)。多个值用 in,SQL 的 in 语句参数是字符串数组,每个都要求带单引号。
解决方案:转化下,把控件的返回值改成字符串,间隔符用','。
8.2 自定义数据字典显示等号问题
原因分析:自定义数据字典,跟单元格还有自定义提示框一样,如果不是‘=’号开头是当做字符串处理,‘=’号开头当做公式处理
解决方案:单写一个等号就是空白的,想要显示等号的话用="="
8.3 no function found: XXX
原因分析:没找到自定义函数, 一般都是设计器本地的cpt拷到服务器上, 自定义函数没拷过去.
8.4 UNEXPECTED WIDGET
问题描述:设计器打开模板, 找不到控件
原因分析:一般是用了自定义控件, 或者某个插件里的控件, 当前运行环境里找不到。
解决方案:重新设置自定义控件或安装对应的插件。
8.5 程序数据集界面上设置了参数无法保存
原因分析:程序数据集 class 里自己定义了参数, 会跟界面冲突, 出于兼容原因, 优先选择使用 class 里设置的.
解决方案:删掉程序数据集 class 里的参数, 直接用界面上的. 代码中不去 setParameter, 直接 getParameter 即可.
8.6 Cannot create JDBC driver of class '' for connect URL ''
问题描述:在预览模板的时候,后台日志抛错如下图:
原因分析:在模板中为单元格设置了 数据字典,但是却没有绑定数据表和字段。
解决方案:重新设置数据字典后保存预览即可。
8.7 Invalid argument
问题描述:具体报错信息:Invalid argument to native writeImage
原因分析:一般是因为 JDK 不支持部分图片的解码
解决方案:将模板里图片重新用 qq 截图之类的生成 png 之类试试
8.8 com.fr.base.TableData$1
问题描述:具体报错信息:com.fr.base.TableData$1 cannot be cast to com.fr.data.impl.NameTableData
解决方案:看堆栈, 上图堆栈就是某个单元格用了公式形态, 但是公式没获取到对应的数据集. 具体哪个单元格, 可以通过二分法确定.
8.9 单元格计算死循环
问题描述:在预览一个模板时,出现如下图所示错误代码:11300003 单元格计算死循环
原因分析:在预览报错提示页面有关于具体情况的说明,分别如下:
1)如果出错对象只有一个单元格,比如 A1,则说明 A1 所引用的单元格出现了死循环。
2)如果出错对象是两个单元格,比如 [B1, A1],则说明 A1 和 B1 的左父格或者上父格设置出现了死循环。
3)如果出错对象是一个单元格,但用中括号标记出来了,比如 [A1] ,则说明 A1 的左父格或者上父格引用了自身。
解决方案:请参考单元格计算死循环
8.10 修改了参数,预览时模板没有变化
问题描述:修改了报表模板中的参数名字,预览模板,输入参数值后发现没有效果。
原因分析:可能是修改了参数名后,对应的控件名没有改变,因此在参数界面中输入值后没有传给相应的参数。
解决方案:将参数控件名设置与参数名相同。
8.11 冻结标题时首行上边框粗
问题描述:当报表设置了重复冻结时报表预览效果如下,首行数据行与标题行之间的边框线很粗:
解决方案:请参考 冻结标题时首行上边框粗解决方案
8.12 单元格添加树节点,字体样式设置失效
问题描述:设计器中字体设置的是白色, 添加了树节点按钮后预览, 字体就变成了黑色,如下图所示:
解决方案:
1)在模板Web属性中添加加载结束时间,输入JS代码:$(".x-text").css("color","red")
2)并选择对应的控件,添加点击事件,输入JS 代码:$(".x-text").css("color","red")
3)保持报表预览即可。
注:需要根据实际情况修改JS代码。
9. 服务器或文件问题
9.1 java.lang.NoClassDefFoundError
9.1.1 具体报错:sun.awt.X11GraphicsEnvironment Could not initialize class sun.awt.X11.XToolkit
原因: 一般发生在 Linux 下, 处理图片时需要本地的 jvm x-server 的支持.
解决方案:启动 Java 时加上参数:-Djava.awt.headless=true 例如:我们在启动 Tomcat 时在启动命令行里面加上这个参数就可以了.
对于 WebLogic 可以设置在/export/home/xxx(用户名)/weblogic/wlserver_10.3/common/bin/commEvn.sh中
Sun)
JAVA_VM=-client
MEM_ARGS="-Xms1024m -Xmx1024m -XX:MaxPermSize=1024m"
JAVA_OPTIONS="${JAVA_OPTIONS} -Xverify:none"
;;
*)
JAVA_VM=
MEM_ARGS="-Xms1024m -Xmx1024m"
;;
esac
fi
export JAVA_VM MEM_ARGS JAVA_OPTIONS
之后添加下面两句:
JAVA_OPTIONS="${JAVA_OPTIONS} -Djava.awt.headless=true "
export JAVA_OPTIONS
对于 WebSphere 则进入「应用程序服务器 > server1 > 进程定义 > Java 虚拟机」。
一般 JVM 自变量 :-Dfile.encoding=GBK -Ddefault.client.encoding=GBK -Djava.awt.headless=true
9.1.2 具体报错:com/fr/general/logRecordTime
解决方案:JAR 包一致的前提下, 删掉所有的插件, 先确定 Tomcat 下独立部署有没有问题, 如果没问题, 再看看是不是要改 WebLogic的 JRE.
9.1.3 具体报错:com/fr/web/core/service/WidgetService
原因分析:放错了 Applet 包导致的, 比如把 Applet 放到里 lib 目录等等.
解决方案:将 Applet 放到%FR_HOME%\webapps\webroot目录下
9.1.4 具体报错:sun/io/UnknownCharacterException
原因分析:可能是驱动异常导致的。
解决方案:检查替换驱动。
9.2 java.net.SocketException
9.2.1 具体报错信息:Connection reset by peer 或者 Broken pipe
资源文件读取失败, 原因有很多, 需要更细致的排查
可能原因:
1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接 Down 掉;
2)客户关掉了浏览器,而服务器还在给客户端发送数据;
3)浏览器端按了 Stop
解决方案:
1)减少并发,如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中了病毒或者木马,引起网络流量异常。
2)针对第二种和第三种情况一般不会影响服务器。
但是如果对异常信息没有特别处理,有可能在服务器的日志文件中,重复出现该异常,造成服务器日志文件过大,影响服务器的运行。
可以对引起异常的部分,使用 try...catch 捕获该异常,然后不输出或者只输出一句提示信息,避免使用 e.printStackTrace(); 输出全部异常信息。
9.2.2 具体报错信息:ClientAbortException:java.net.SocketException
原因分析:处理 http 连接时,正在输出内容时,用户关闭了 IE,会出现一个"ClientAbortException",属于 I/O 处理中出现的一个异常
注:不一定是用户主动触发的, 网络不稳定时也有可能出现.
9.3 java.lang.SecurityException
问题描述:具体报错信息:class "xx"'s signer information does not match signer information of other classes
原因分析:class 被重复加载了, 最常见的就是 webapps/webroot/WEB-INF/lib 里多放了一个 Applet 包.
解决方案:删除即可
9.4 ParseError at [row,col]:[x,xx]
问题描述:具体报错信息:com.fr.third.javax.xml.stream.XMLStreamException : ParseError at [row,col]:[x,xx]
原因分析:xml 文件内容有损坏, 具体哪一行那一列, 看[row, col]提示.
解决方案:看报错里是哪个 manager 导致的, 一般
DatasourceManager -> datasource.xml
FunctionManager -> functions.xml
ConfigManager -> config.xml
CustomConfigManager -> customconfig.xml
WidgetManager -> widgets.xml
9.5 Can't create cache file
原因分析:Tomcat 下没有 temp 目录, 或者是 temp 目录写入权限不够
解决方案:在 Tomcat 的安装目录下创建这个目录就好了
9.6 Get PublicKey method failed
原因分析:具体报错信息:Get PublicKey method failed,status is : -1
解决方案:连不上数字签名服务器了, 检查网络是否可以ping通以及数字签名所在服务器是否正常, 看不出来问题就重启下.
9.7 Could not initialize class
问题描述:具体报错信息:Could not initialize class Sense4.Sense64
原因分析:fs 里开启了加密狗注册, 但是没有安装对应的驱动.
9.8 com.fr.test.xxx not found
问题描述:具体报错信息:启动 Tomcat 有一些 function: com.fr.test.xxx not found!
原因分析:为了提升自定义函数计算速度, 将自定义函数放在启动的时候去加载;如果自定义函数找不到就会有这个报错, 一般不影响, 因为有一些是我们内置的 demo.
9.9 java.io.FileNotFoundException
问题描述:具体报错信息:java.io.FileNotFoundException: xxx.cpt or xml (拒绝访问)
原因分析:文件不存在, 或者web浏览器没有文件夹的访问权限。
9.10 war 包部署, 修改 xml 再次部署后未生效
原因分析:WebLogic 下, war 包部署是不解压的, 所以我们会把所有的 xml 拷贝到临时目录进行增删改.
解决方案:可以通过访问 op=fr_base&cmd=evaluate_formula&expression=jvm() 查看缓存路径, 删掉缓存路径的 FineReport8.0 文件夹再部署.
9.11 java.net.BindException
问题描述:具体报错信息:java.net.BindException:Address already in use: JVM_Bind
原因分析:一般都是上一次 Tomcat 没有彻底关掉就再次启动导致端口被占用了.
9.12 当前hsql已被另一线程锁定
原因分析:两个 Web 服务器共用了同一个 WebReport. 最常见的, 启动了 Tomcat, 设计器也用本地目录切了过去.
或者 Tomcat 里用了 docBase 映射, 映射的地址是tomca/webapps中的 WebReport, 这样会被加载两次.
解决方案:删掉 db.lck,重启 Tomcat 服务,修改配置可以解决
9.13 Web 端 654 和 655错误
原因分析:加载了有问题的 class 文件做出的程序数据集
解决方案:程序数据集 class 必须放在%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\data下,编译好了后的 class 名也不能修改。
9.14 Can't create cache file错误
原因分析:Tomcat 下没有 temp 目录, 或者是 temp 目录写入权限不够
解决方案:Linux 下创建 temp 目录,赋权限 777;Windows 下可以把工程从 C 盘移到 D 盘
9.15 预览 Multiple exceptions, web 端卡住
原因分析:一般是因为设计器默认8075端口被占用了
解决方案:点击「文件>选项>高级」,换一个设计器端口, 重启.
10. 其他问题
10.1 final block not properly padded
原因分析:DES 加密的类初始化有问题, 不过只在 OpenJDK 里遇到过.
解决方案:换成正常 Linux 下的 JDK 就好了.
10.2 javax.mail.SendFailedException
问题描述:Invalid Addresses javax.mail.AuthenticationFailedException
原因分析:邮件收件人, 邮箱账号密码错误或者邮箱服务器有问题,被邮箱服务器拒绝了连接, 可能判定为发送垃圾邮件等行为
解决方案:重新输入收件人及密码等或者换个邮箱
10.3 报表背景在不同电脑上显示颜色不一样
问题描述:
服务器本身正常显示状态:
部分客户机非正常显示状态:
原因分析:电脑在显示上有比较大的失真,报表背景色 RGB(248, 247, 230),三种颜色都参与了颜色的生成,且数值都不大,因此在某些显示效果比较差的电脑上,就会导致比较大的失真,甚至会出现一个显示淡蓝色,一个显示粉红色的情况,检查发现报表传递的颜色参数是正常的,所以只是单纯的显示问题。
解决方案:在使用 RGB 参数来调整背景色时,最好设置其中一到两个参数为 255,例如,R 参数为 255,G 参数为 255,B 参数为 212,RGB(255,255,212) 这样失真的可能性会小一些,颜色误差不是很大,基本相同。