2011-10-25 17 views
3

私は、プログラムに渡された値に基づいてレポートを生成する単純なスタンドアロンデスクトップアプリケーションを開発中です。データベースの使用はありません。私はJasperReportsレポートをiReportデザイナーで設計し、パラメータID_NOと式を含むテキストフィールドを追加しました。$P{ID_NO}JasperReports APIを使用してコード内に 'java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory`があります

私はレポートを正常にプレビューでき、私が期待したものを見ることができます。しかし、私はJavaアプリケーションからレポートを生成することができず、そこからパラメータID_NOを渡します。ここに私のコードは次のとおりです。

public class MyReportViewer extends JFrame { 

    public MyReportViewer(String fileName) { 
     this(fileName,null); 
    } 

    public MyReportViewer(String fileName,HashMap<String, Object> parameter) { 
     super("View Report"); 
     try { 
      JasperPrint print = JasperFillManager.fillReport(fileName, parameter); 
      JRViewer viewer = new JRViewer(print); 

      Container c = getContentPane(); 
      c.add(viewer); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 

     setBounds(10, 10, 600,500); 
     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
    } 

    public static void main(String args[]) { 
     HashMap<String, Object> param = new HashMap<String, Object>(); 
     param.put("ID_NO", "101-15-980"); 
     MyReportViewer viewer = new MyReportViewer("test.jasper", param); 
     viewer.setVisible(true); 
    } 
} 

コードが例外に

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
    at net.sf.jasperreports.engine.util.JRLoader.<clinit>(JRLoader.java:61) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:267) 
    at jspertest.MyReportViewer.<init>(MyReportViewer.java:37) 
    at jspertest.MyReportViewer.main(MyReportViewer.java:60) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 

を与え、実行されません。

私に手がかりを与えてください。私はJasperReportsや他のレポート作成ツールを使用したことがありません。

編集:

がjasperreports4.x.x /プロジェクトに../libにからすべてのライブラリファイルを追加しました。今例外はなくなりました。コンソールには -

log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment). 
log4j:WARN Please initialize the log4j system properly. 

と書かれています。小さなポップアップでは文書にページがないと言います。小さいウィンドウが表示され、レポートは表示されません。

+0

このコードを実行するとどうなりますか?それはコンパイルされますか?それは例外をスローしますか?もしそうなら、スタックトレースは何ですか?フレームに何かが見えますか?何? –

+0

不完全な質問をお詫び申し上げます。最後の数行が欠落していますので、編集してください。 – shababhsiddique

答えて

3

あなたの例外はパラメータの問題とは関係ありません。これは明らかに良好です。

クラスパスにApache Commons Loggingがないようです。 IDEが正しいクラスパスを持っているため、プレビューモードで実行されます。

+1

http://commons.apache.org/logging/からjarをダウンロードし、クラスパスに追加してください。いくつかのライブラリがありません –

+1

http://jasperforge.org/uploads/publish/jasperreportswebsite/trunk/requirements.htmlには必要なライブラリが含まれています。 –

+0

jasperreports-4.1.2 \ libからすべてのjarファイルを追加しました。例外がなくなり、ウィンドウポップアップが表示されます - 「ドキュメントにはページがありません。コンソールにメッセージが表示されます」 - 「log4j:WARN Logger(net.sf.jasperreports.extensions.ExtensionsEnvironment)のアペンダーは見つかりませんでした。 log4j:WARN log4jシステムを正しく初期化してください。 – shababhsiddique

1

そうです。 "The document has no pages"は、データソースにレコードが存在しないため、レポートが生成されないことを意味します。

0

データがレポートに存在しない場合でも、レポートで空白ページが表示されるプロパティを設定できます。

NOデータプロパティを使用すると、データセットがゼロ行を返すか、レポートに印刷するデータがない場合でも、異なる値と異なる表示方法を選択できます。

関連する問題