程式資料源常見問題

1. 概述

本文主要提供了程式資料源在使用中遇到的問題以及解決方案。

2. 程式資料集載入慢或者卡死

原因分析

沒有做初始化只執行一次的判斷

解決方案

因為 getValueAt() 方法裏面呼叫了 init() 方法導致執行次數太多後台卡住預覽不了資料,正確修改如下:


public void init() {  
        // 確定只被執行一次  
        if (valueList != null) {  
           return;  
     }

3. 程式資料集獲取不到參數

原因分析

獲取參數的API位置寫錯,未放到 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 底下都put 命令 tools 包。

5. 程式資料集預覽資料中文亂碼或者過濾無資料

原因分析:

資料庫編碼與設計器編碼不一致導致(優先保證程式碼單獨執行可以正常取數)

解決方案:

方案一:修改設計器的編碼,修改設計器啟動參數,在 %FR_HOME%bin\designer.vmoptions 檔案中新增參數:-Dfile.encoding=UTF-8

方案二:修改資料連結的編碼

6. 報錯:java.lang.NoClassDefFoundError

問題描述:

程式資料集遠端設計時,設定參數儲存後不顯示或取不出資料。

原因分析:

明顯的缺少jar依賴包: httpclient

解決方案:

參考 Eclipse中啟動設計器 匯入所有的 jar 包。

7. 報錯:Could not initialize class com.fr.web.Oldweblet

問題描述:

啟動工程,catalina.out列印出報錯Could not initialize class com.fr.web.Oldweblet,範本顯示空白。

原因分析

版本升級或者版本不一致導致無法初始化類。

解決方案

對於不同版本的FRAPI是有所變化的,修改對應程式碼重新編譯即可。

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();透過這種方式獲取參數,是個空陣列,結果獲取不到程式資料集裏傳入的參數

原因分析

程式資料集獲取不到參數,編寫錯誤。

解決方案

把獲取參數的API寫到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

原因分析:

程式資料集取數時手動新增的參數,

如果多於程式碼裏面使用的參數則正常

如果少於程式碼裏面使用的參數則會報錯陣列越界

解決方案:

程式資料集建立的參數數量應跟程式碼裏定義的參數一致

附件列表


主題: 二次開發
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙

反饋已提交

網絡繁忙