- - PR -
JFreeChartのIllegalArgumentException
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-09 11:52
はじめまして。
JFreeChartを使ってLineChartを作っています。 固定データではチャートができましたが、DBからのデータではエラーが出てうまくできません。 エラーを見るとrowが問題みたいですが、理由がわかりません。。。 解決対策をぜひ教えてください。 よろしくお願いします。 ・JFreeChartバージョン:1.0.1 import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.*; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.CategoryDataset; import org.jfree.data.general.DatasetUtilities; public class LineChartSample { static { try{ Class.forName("oracle.jdbc.driver.OracleDriver"); }catch(ClassNotFoundException e){ System.out.println(e); } } public static void main(String[] args) { String url = "jdbc:oracle:thin:@oracle:1521:db"; String user = "user"; String pwd = "password"; Statement stmt = null; ResultSet rs = null; int i=0; double[][] data = new double[i][7]; double mon,tue,wed,thu,fri,sat,sun; String itemName=new String(); Comparable[] row=new Comparable[]{}; //SQL //レコードカウント用 String countSql="SELECT_COUNT_SQL"; //データ用 String sql="SELECT_SQL"; try { Connection con=DriverManager.getConnection(url, user, pwd); stmt= con.createStatement (); rs = stmt.executeQuery (countSql); rs.next(); int j = Integer.parseInt(rs.getString("COUNT")); System.out.println(" j="+j); rs.close(); rs = stmt.executeQuery (sql); while (rs.next ()){ itemName=rs.getString("itemName"); mon=Double.parseDouble(rs.getString ("MON")); tue=Double.parseDouble(rs.getString ("TUE")); wed=Double.parseDouble(rs.getString ("WED")); thu=Double.parseDouble(rs.getString ("THU")); fri=Double.parseDouble(rs.getString ("FRI")); sat=Double.parseDouble(rs.getString ("SAT")); sun=Double.parseDouble(rs.getString ("SUN")); row = new Comparable[j]; row[i]=itemName; data =new double[j][7]; data[i][0]=mon; data[i][1]=tue; data[i][2]=wed; data[i][3]=thu; data[i][4]=fri; data[i][5]=sat; data[i][6]=sun; i=i+1; } rs.close(); con.close(); System.out.println("row= "+row.length); } catch (Exception e) { e.printStackTrace(); } Comparable[] col = new Comparable[] {"mon","tue","wed","thu","fri","sat","sun"}; CategoryDataset cData = DatasetUtilities.createCategoryDataset(row, col, data); //→ここが131行目です // オブジェクト生成 JFreeChart chart = ChartFactory.createLineChart("SampleLineGraph", "Date", "Number", cData, PlotOrientation.VERTICAL, true, true, false); // チャート生成 File outputFile = new File("DBChart.png"); try { ChartUtilities.saveChartAsPNG(outputFile, chart, 600, 600); } catch (IOException ioEx) { ioEx.printStackTrace(); } } } ===========ここからエラーです================= j=14 row= 14 java.lang.IllegalArgumentException: Null 'key' argument. at org.jfree.data.DefaultKeyedValues2D.getRowIndex(DefaultKeyedValues2D.java:168) at org.jfree.data.DefaultKeyedValues2D.setValue(DefaultKeyedValues2D.java:274) at org.jfree.data.DefaultKeyedValues2D.addValue(DefaultKeyedValues2D.java:260) at org.jfree.data.category.DefaultCategoryDataset.addValue(DefaultCategoryDataset.java:191) at org.jfree.data.general.DatasetUtilities.createCategoryDataset(DatasetUtilities.java:442) at LineChartSample.main(LineChartSample.java:131) [ メッセージ編集済み 編集者: MARU 編集日時 2006-02-09 11:52 ] | ||||||||||||
|
投稿日時: 2006-02-09 12:01
問題があるとしたら colかdataかもしれませんよ。少なくとも、rowはnullではないようですし。 131行目の直前に、以下のように入れてみては?
少なくとも、どれかがnullなんでしょう。 どれがnullなのかが判明したら、次はその原因の確認です。 | ||||||||||||
|
投稿日時: 2006-02-09 13:13
Edosson様、早速のアドバイスどうもありがとうございます。 おっしゃった通り、rowをプリントしてみたら rowは全部(14件)nullでした。 配列の書き方が悪かったと思います。 申し訳ございませんが、
の正しい書き方を教えてください。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-02-09 13:17
「JFreeChartのIllegalArgumentException」は解決したようですから、焦点を明確にするためにも別スレッドにしてはいかがでしょう?
| ||||||||||||
|
投稿日時: 2006-02-09 13:27
rowの要素がnullになっちゃう原因はここですね。
ループの中で要素ごとにrowを生成し直しているのが原因です。 要素が全部nullとのことですが、最後の要素(14番目でしょうか)だけは、 期待通りの値が入っているんでしょう。 どのように修正すべきか、についてはご自身で頑張ってください。 | ||||||||||||
|
投稿日時: 2006-02-09 14:01
Edosson様、ありがとうございます!
すごく助かりました〜^o^ |
1