目录:
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 删除它即可,如下图:
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 com.fr.stable.fun.Level
问题描述:具体报错信息:com.fr.plugin.record.FunctionRecordManager cannot be cast to com.fr.stable.fun.Level
解决方案:删除 plugins 目录下的老的功能点记录插件. 停止维护了。
4.6 design_open error
原因分析:远程设计, 模板打开报错, 打开一些简单的模板试试, 如果简单的可以, 只有部分不行, 考虑是不是两边jar不一致, 插件不一致。详细可参考:JAR包不匹配常见问题
5. 浏览器导致的问题及解决方案编辑
5.1 Not found resource
问题描述:具体报错信息:com/fr/web/core/hack/PIE.htc 或者 Not found resource: /com/fr/fs/resources/fonts/iconfont.eot?
原因分析:这两个都是ie低版本下不支持某些样式或者 css 的写法导致的, 并不影响使用.可能会损失写透明阴影之类的特效.
解决方案:使用高版本的IE
5.2 谷歌浏览器问题
5.2.1 单元格边框粗细不一致
问题描述:报表页面设置单元格的边框粗细一致,但是谷歌浏览器预览的时候,粗细偶发不同的行列粗细不一致,如下图所示:
原因分析:谷歌浏览器渲染相邻单元格的边框,有时候会合并两个相邻单元格边框只展示一个,有时候不合并相邻两个单元格的边框,导致粗细不一致。
解决思路
1)更换浏览器。
2)开启新计算引擎插件,详情请参考:开启新计算引擎
3)使用 CSS 修改单元格属性。编写 CSS 文件,将编写后的文件放到 webroot 下,在 web 属性引用 CSS 文件即可,CSS 文件内容如下:
element.style {
background-color: rgb(192,192,192);
}
.bw {
word-wrap: break-word;
}
.fh {
overflow: hidden;
padding: 0;
vertical-align: middle;
text-align: left;
font-size: 9pt;
font-family: SimSun;
}
.b1 {
border: 0.5px solid #000;
}
.x-table {
overflow: hidden;
table-layout: fixed;
border-collapse: inherit;
*word-break: break-all;
*overflow: visible;
}
user agent stylesheet
table {
text-indent: initial;
border-spacing: 1px;
}
.sheet-container {
cursor: default;
}
5.2.2 预览普通模板边框变粗
问题描述:Chrome 91浏览器下,报表表格变粗,调整浏览器缩放(100%)正常,(110%)异常。
原因分析:谷歌浏览器渲染问题
解决方案:修改浏览器缩放,或更新谷歌浏览器到最新版本,或使用决策报表的新自适应模板。
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
原因分析:模板太复杂,数据量大, 堆栈溢出
解决方案:优化数据集,报表采用分页预览方式;调大服务器内存。处理方法可参考:Java heap space 报错
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 的左父格或者上父格引用了自身。
解决方案:请参考单元格计算死循环
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 Web 端访问 cpt, 提示找不到模板
原因分析及解决方案:是不是所有的 cpt 都找不到, 还是说只有部分新增的找不到? 如果是新增的找不到, 是不是集群没有同步到其他节点.
所有的 cpt 都找不到, 去「fs > 智能运维->系统情况 > 系统状态 > 配置文件检测」 查看 xml 文件都放在哪的。从该路径查找 reportlets 目录.
9.11 war 包部署, 修改 xml 再次部署后未生效
原因分析:WebLogic 下, war 包部署是不解压的, 所以我们会把所有的 xml 拷贝到临时目录进行增删改.
解决方案:可以通过访问 op=fr_base&cmd=evaluate_formula&expression=jvm() 查看缓存路径, 删掉缓存路径的 FineReport8.0 文件夹再部署.
9.12 java.net.BindException
问题描述:具体报错信息:java.net.BindException:Address already in use: JVM_Bind
原因分析:一般都是上一次 Tomcat 没有彻底关掉就再次启动导致端口被占用了.
9.13 当前hsql已被另一线程锁定
原因分析:两个 Web 服务器共用了同一个 WebReport. 最常见的, 启动了 Tomcat, 设计器也用本地目录切了过去.
或者 Tomcat 里用了 docBase 映射, 映射的地址是tomca/webapps中的 WebReport, 这样会被加载两次.
解决方案:删掉 db.lck,重启 Tomcat 服务可以解决
9.14 Web 端 654 和 655错误
原因分析:加载了有问题的 class 文件做出的程序数据集
解决方案:程序数据集 class 必须放在%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\data下,编译好了后的 class 名也不能修改。
9.15 Can't create cache file错误
原因分析:Tomcat 下没有 temp 目录, 或者是 temp 目录写入权限不够
解决方案:Linux 下创建 temp 目录,赋权限 777;Windows 下可以把工程从 C 盘移到 D 盘
9.16 预览 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
原因:邮件收件人, 邮箱账号密码错误或者邮箱服务器有问题,被邮箱服务器拒绝了连接, 可能判定为发送垃圾邮件等行为
解决方案:重新输入收件人及密码等或者换个邮箱