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中
之後新增下面兩句:
對於 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 copy到臨時目錄進行增刪改.
解決方案:可以透過存取 op=fr_base
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) 這樣失真的可能性會小一些,顏色誤差不是很大,基本相同。