历史版本48 :报表常见问题 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概论编辑

我们在平时的报表运行过程中会遇见各种各样的问题,下面列举了一些常见的报错信息、原因和基本解决方法。

常见的错误代码报错及解决方案请参考:错误代码汇总及解决方案

注:JAR 为 2018.4.9 及之后,不再支持 applet 打印,请使用其他打印方法。

2. 常见问题及解决方案编辑

2.1 address pool is full 

  • 原因:地址池满,连接数超过并发数上限

  • 解决方案:管理系统>智能运维>系统情况下面,看到当前系统在线用户数,然后再比较注册信息页面里的 Concurrency,

判断是否超过购买的并发数,从而选择减少并发人数或者增大最大并发数

详细可查询:address pool is full 错误处理

2.2 java heap space、stack overflow

  • 原因:模板太复杂,数据量大, 堆栈溢出

  • 解决方案:优化数据集,报表采用分页预览方式;调大服务器内存。

处理方法可参考:Java heap space 报错报表性能优化

2.3 下拉复选框返回值问题

  • 原因:下拉复选框控件返回值默认情况下是数组,参数取到的字符串是不带引号的(所以在数据集定义的 SQL 语句中调用字符串类型的参数的话要手动加上单引号才行)。多个值用 in,SQL 的 in 语句参数是字符串数组,每个都要求带单引号。

  • 解决方案:转化下,把控件的返回值改成字符串,间隔符用','。

2.4 本地预览的效果和服务器上的效果不一样

  • 原因:JAR 包存在差异或者缓存问题

  • 解决方案:更新 JAR 包,确保开发环境和服务器平台一致正确,仍不行可重启设计器或者清空浏览器缓存。

2.5 图表中中文乱码,出现方框等

  • 原因:方框是缺少中文字体的缘故。

  • 解决方案:对应计算机系统,下载更新对应的中文字体库。

2.6 repeated column width is larger...

  • 原因:重复列宽度大于纸宽度。

  • 解决方案:设置小于列宽就行了。

2.7 由一个单元格扩展出来的行高不一致

  • 原因:某一行内容比较多一行显示不了,就换行了,所以变宽了。

  • 解决方案:将单元格拉宽点就好了。

2.8 自定义数据字典显示等号问题

222

  • 原因:自定义数据字典,跟单元格还有自定义提示框一样,如果不是‘=’号开头是当做字符串处理,‘=’号开头当做公式处理

  • 解决方案:单写一个等号就是空白的,想要显示等号的话用="="

2.9 找不到数据连接

2.10 an internal error occurred

  • 原因:安装 exe 时会出现的报错,一般是因为下载下来的安装文件有损坏, 不完整.

  • 解决方案:在官网用浏览器下载的 官方 exe.

2.11 index xx,size xx

  • 原因:一行的高度大于一页的高度。

  • 解决方案:可以纵向合并单元格,使一格占多行,这样就可以把行高大于页高的单元格拆分为多行进行计算了,预览就会以多页的方式显示出来。列宽同理,一个单元格的长度不能大于一页的宽度。否则将会出现错误,可以横向合并单元格。

2.12 TTf is not a valid TTF or OTF file

  • 原因: pdf 导出会扫描本地的字体文件, 如果字体损坏, 就会有上述报错. 

  • 解决方案: 提示哪个字体损坏, 就拷贝一份过去.

2.13 UnsupportedClassVersionError

  • 原因: 一般是由于技术支持给客户定制修改过 JAR 包里的 class 导致的

  • 解决方案:需要将 IDE 的工程编译等级调整到 1.6.

2.14 java.lang.AbstractMethodError

  • 原因: 一般都是因为引擎的 JAR, 插件的 JAR, 以及设计器的 JAR, 这三者之间不同步, 不是同一个时间编译出来的.

  • 解决方案: 更新所有 JAR.

2.15 java.lang.NoClassDefFoundError 

2.15.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

2.15.2 具体报错:com/fr/general/logRecordTime

JAR 包一致的前提下, 删掉所有的插件, 先确定 Tomcat 下独立部署有没有问题, 

如果没问题, 再看看是不是要改 WebLogic的 JRE.

2.15.3 具体报错:com/fr/web/core/service/WidgetService

  • 原因:放错了 Applet 包导致的, 比如把 Applet 放到里 lib 目录等等.

  • 解决方案:将 Applet 放到%FR_HOME%\webapps\webroot目录下

2.15.4 具体报错:sun/io/UnknownCharacterException

  • 原因:可能是驱动异常导致的。

  • 解决方案:检查替换驱动。

2.16 final block not properly padded

  • 原因: DES 加密的类初始化有问题, 不过只在 OpenJDK 里遇到过.

  • 解决方案:换成正常 Linux 下的 JDK 就好了.

2.17 javax.mail.SendFailedException

  • 报错:Invalid Addresses  javax.mail.AuthenticationFailedException

  • 原因:邮件收件人, 邮箱账号密码错误或者邮箱服务器有问题,被邮箱服务器拒绝了连接, 可能判定为发送垃圾邮件等行为

  • 解决方案:重新输入收件人及密码等或者换个邮箱.

2.18 java.lang.SecurityException

  • 具体报错信息:class "xx"'s signer information does not match signer information of other classes

  • 原因:class 被重复加载了, 最常见的就是 webapps/webroot/WEB-INF/lib 里多放了一个 Applet 包.

  • 解决方案:删除即可

2.19 java.lang.NoSuchMethodError

  • 原因:一般都是 JAR 包不匹配

  • 解决方案:设计器 lib, webapps 里的 lib 以及插件三者要保持一致.

2.20 Invalid argument 

  • 具体报错信息:Invalid argument to native writeImage

  • 原因:一般是因为 JDK 不支持部分图片的解码

  • 解决方案:将模板里图片重新用 qq 截图之类的生成 png 之类试试.

2.21 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.22 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

2.23 Not found resource

  • 具体报错信息:com/fr/web/core/hack/PIE.htc 或者 Not found resource: /com/fr/fs/resources/fonts/iconfont.eot?

  • 原因:这两个都是ie低版本下不支持某些样式或者 css 的写法导致的, 并不影响使用.可能会损失写透明阴影之类的特效.

  • 解决方案:使用高版本的IE

2.24 java.net.SocketException

2.24.1 具体报错信息:Connection reset by peer 或者 Broken pipe

资源文件读取失败, 原因有很多, 需要更细致的排查

  • 可能原因:

      1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接 Down 掉;

      2)客户关掉了浏览器,而服务器还在给客户端发送数据;

      3)浏览器端按了 Stop

  • 解决方案:

      1)减少并发,如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中了病毒或者木马,引起网络流量异常。

      2)针对第二种和第三种情况一般不会影响服务器。

但是如果对异常信息没有特别处理,有可能在服务器的日志文件中,重复出现该异常,造成服务器日志文件过大,影响服务器的运行。

可以对引起异常的部分,使用 try...catch 捕获该异常,然后不输出或者只输出一句提示信息,避免使用 e.printStackTrace(); 输出全部异常信息。

2.24.2 具体报错信息:ClientAbortException:java.net.SocketException

  • 原因:处理 http 连接时,正在输出内容时,用户关闭了 IE,会出现一个"ClientAbortException",属于 I/O 处理中出现的一个异常

注:不一定是用户主动触发的, 网络不稳定时也有可能出现.

2.25 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.

  • 解决方案:升级驱动到对应数据库版本即可

3.26 Error Happens On Picture Analysis

  • 原因:Excel 导入的时候部分图片可能会解析失败, 或者获取的宽高有问题.

注:如果页面上需要的内容没问题, 那么可以无视这个报错

2.27 Can't create cache file

  • 原因:Tomcat 下没有 temp 目录, 或者是 temp 目录写入权限不够

  • 解决方案:在 Tomcat 的安装目录下创建这个目录就好了

2.28 Excel format pattern not supported

  • 具体报错信息:Excel format pattern not supported by java

  • 原因:一般是因为Excel里用了什么自定义的数字样式, 导入报表中的时候用 Java 解析发现不支持

2.29 Cannot load JDBC driver class

  • 原因:驱动问题

  • 解决方案:查看数据库驱动是否正常. 如果确定驱动是有的, 再看 JDK 与驱动是否匹配

2.30 设计器支离破碎, 显示不全

2.31 paged queries not supported

  • 原因:当前数据库不支持分页查询行式引擎

  • 解决方案:换个数据库比如 MySQL, SQLServer, Oracle 等等。

2.32 Cannot connect to site server: xxx

  • 原因:连不上应用商店, 不影响使用。

2.33 no function found: XXX

  • 原因:没找到自定义函数, 一般都是设计器本地的cpt拷到服务器上, 自定义函数没拷过去.

2.34 Cannot get a connection

  • 具体报错信息:Cannot get a connection,pool error Timeout waiting for idle object

  • 原因:数据库连不上, 连接池满了或者超时之类的. 

  • 解决方案:点击服务器>定义数据连接,如下图所示,点击连接池属性,弹出连接池属性编辑框,调整最大活动连接数

2.35 com.fr.stable.fun.Level

  • 具体报错信息:com.fr.plugin.record.FunctionRecordManager cannot be cast to com.fr.stable.fun.Level

  • 解决方案:删除 plugins 目录下的老的功能点记录插件. 停止维护了。

2.36 Class not found: JForm

  • 原因:打开报表的时候出错了, 可能是因为用了某个插件而当前设计器没装该插件等等. 具体要看更详细的日志

2.37 泰语 韩语等小语种乱码

  • 解决方案:修改 fs 里的编码设置为 UTF-8

2.38 Get PublicKey method failed

  • 具体报错信息:Get PublicKey method failed,status is : -1

  • 解决方案:连不上数字签名服务器了, 检查网络是否可以ping通以及数字签名所在服务器是否正常, 看不出来问题就重启下.

2.39 java.lang.OutOfMemoryError

  • 原因:内存溢出了

  • 解决方案:重启后观察. 如果频繁内存溢出建议安装防宕机插件

2.40 预览 Multiple exceptions, web 端卡住

  • 原因:一般是因为设计器默认8075端口被占用了

  • 解决方案:点击文件>选项>高级,换一个设计器端口, 重启.

2.41 Could not initialize class

  • 具体报错信息:Could not initialize class Sense4.Sense64

  • 原因:fs 里开启了加密狗注册, 但是没有安装对应的驱动.

2.42 Web 端出现 404 报错

  • 具体报错信息:web端出现404 - /webapps/webroot/[object%20Object]

  • 解决方案:update: 2016-11-17之后的jar已修复该bug.

2.43 com.fr.test.xxx not found

  • 具体报错信息:启动 Tomcat 有一些 function: com.fr.test.xxx not found!

  • 原因:性能组那边为了提升自定义函数计算速度, 将自定义函数放在启动的时候去加载;

如果自定义函数找不到就会有这个报错, 一般不影响, 因为有一些是我们内置的 demo.

2.44 UNEXPECTED WIDGET 

  • 报错:设计器打开模板, 找不到控件

  • 原因:一般是用了自定义控件, 或者某个插件里的控件, 当前运行环境里找不到.

2.45 设计器直接起不来

  • 解决方案:先用任务管理器查看进程, 是不是有 designer.exe, 有就关掉再启动试试.

  • 如果还是不行, 打开 bin 目录的 designer.bat, 在最后一行添加 pause, 保存后启动 designer.bat, 查看报错.

2.46 design_open error

  • 原因:远程设计, 模板打开报错, 打开一些简单的模板试试, 如果简单的可以, 只有部分不行, 考虑是不是两边jar不一致, 插件不一致.

2.47 插件列表读取失败

  • 原因:一般是因为网络原因导致连接不到商城

  • 解决方案:直接浏览器里访问商城看看能不能访问到: https://market.fanruan.com/

2.48 设计器界面错乱, 菜单显示成英文

  • 原因:可能是上一次打开的模板里面用了当前环境里不存在的插件元素

  • 解决方案:Ctrl + N 新建一张模板后, 退出设计器.再次启动.

2.49 程序数据集界面上设置了参数无法保存

  • 原因:程序数据集 class 里自己定义了参数,  会跟界面冲突, 出于兼容原因, 优先选择使用 class 里设置的.

  • 解决方案:删掉程序数据集 class 里的参数, 直接用界面上的. 代码中不去 setParameter, 直接 getParameter 即可.

2.50 打印或者导出,内容在页尾截断了

  • 原因:Web 端预览的时候, 浏览器可以自动撑开 div, 而打印导出的时候,  是严格收到页面大小限制的, 所以会截断.

  • 解决方案:把截断的单元格设置成分页可以断开.

2.51 com.fr.base.TableData$1 

  • 具体报错信息:com.fr.base.TableData$1 cannot be cast to com.fr.data.impl.NameTableData

222

  • 解决方案:看堆栈, 上图堆栈就是某个单元格用了公式形态, 但是公式没获取到对应的数据集. 具体哪个单元格, 可以通过二分法确定.

2.52 java.io.FileNotFoundException

  • 具体报错信息:java.io.FileNotFoundException: xxx.cpt or xml (拒绝访问)

  • 原因:文件不存在, 或者web浏览器没有文件夹的访问权限。

2.53 远程设计连接服务器总是断开连接

先排查下两边 JAR 是否一致, 如果一致, 看看有没有条件在服务器上装一个设计器, 直接 localhost 看看会不会失败.

如果 localhost 是好的, 通过 IP 不行, 可能是网络问题. 在连接失败的时候, ping 服务器 IP 看看网络响应延迟.

2.54 WcardTitleLayout cannot be cast

  • 具体报错信息:WcardTitleLayout cannot be cast to com.fr.form.ui.ElementCaseEditorProvider

  • 原因:更新了 JAR, 没更新自适应插件.

2.55 Web 端访问 cpt, 提示找不到模板

  • 原因及解决方案:是不是所有的 cpt 都找不到, 还是说只有部分新增的找不到? 如果是新增的找不到, 是不是集群没有同步到其他节点.

所有的 cpt 都找不到, 去「fs > 智能运维->系统情况 > 系统状态 > 配置文件检测」 查看 xml 文件都放在哪的。从该路径查找 reportlets 目录.

2.56 Applet 打印没反应

  • 原因及解决方案:确认下客户浏览器信息, 目前 Chrome 下不支持 applet 打印, 只支持 flash, pdf 以及本地打印.

IE 下建议安装  32 位 JRE, 并且在「控制面板 - Java设置 - 安全」, 把http://localhost:8075加入进去.

2.57 Canot run program xx

  • 具体报错信息:Canot run program xx, error=12, Cannot allocate memory

  • 解决方案:修改下 JVM 的内存配置, 初始内存调小点,详细方法可参考:FR 性能测试注意事项

2.58 7.0 设计器打不开 8.0 的模板

  • 解决方案:用 EditPlus 之类的软件打开 XXX.cpt, 找到倒数第二行 <DesignerVersion DesignerVersion="IAA"/>,将其删除.

注:如果模板里用了新版本的一些属性, 那么在老的设计器里强行打开会报错.

2.59 Web 端访问模板, 出现 "页面排队中"

原因:应该是内存快满了, 防宕机插件启动 Session 排队功能了.

2.60 Flash 打印截断

  • 原因:一般是因为页面用了非 A4 的纸张, Flash 打印无法传递页面设置到打印机.

  • 解决方案:这种一般建议使用 PDF 打印或者本地打印.

2.61 war 包部署, 修改 xml 再次部署后未生效

  • 原因:WebLogic 下, war 包部署是不解压的, 所以我们会把所有的 xml 拷贝到临时目录进行增删改.

  • 解决方案:可以通过访问 op=fr_base&cmd=evaluate_formula&expression=jvm() 查看缓存路径, 删掉缓存路径的 FineReport8.0 文件夹再部署.

2.62 java.net.BindException

  • 具体报错信息:java.net.BindException:Address already in use: JVM_Bind

  • 原因:一般都是上一次 Tomcat 没有彻底关掉就再次启动导致端口被占用了.

2.63 当前hsql已被另一线程锁定

  • 原因:两个 Web 服务器共用了同一个 WebReport. 最常见的, 启动了 Tomcat, 设计器也用本地目录切了过去.

或者 Tomcat 里用了 docBase 映射, 映射的地址是tomca/webapps中的 WebReport, 这样会被加载两次.

  • 解决方案:删掉 db.lck,重启 Tomcat 服务可以解决

3.64 Web 端 654 和 655错误

  • 原因:加载了有问题的 class 文件做出的程序数据集

  • 解决方案:程序数据集 class 必须放在%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\data下,编译好了后的 class 名也不能修改。

2.65 Can't create cache file错误

  • 原因:Tomcat 下没有 temp 目录, 或者是 temp 目录写入权限不够

  • 解决方案:Linux 下创建 temp 目录,赋权限 777;Windows 下可以把工程从 C 盘移到 D 盘。

2.66 Cannot create JDBC driver of class '' for connect URL ''

  • 问题描述:在预览模板的时候,后台日志抛错如下图:


  • 原因:在模板中为单元格设置了 数据字典,但是却没有绑定数据表和字段。

  • 解决方案:重新设置数据字典后保存预览即可。