【问题标题】:Cannot fix the null 'key' argument to get graph to generate无法修复 null 'key' 参数以生成图表
【发布时间】:2015-10-18 16:01:28
【问题描述】:

我有一个图表,它将显示在特定时间段内链接到员工编号的报价和发票之间的比较。当我运行应用程序时,我收到了这条臭名昭著的错误消息:

java.lang.IllegalArgumentException: Null 'key' 参数。 在 org.jfree.chart.util.ParamChecks.nullNotPermitted(ParamChecks.java:65) 在 org.jfree.data.DefaultKeyedValues.setValue(DefaultKeyedValues.java:234) 在 org.jfree.data.DefaultKeyedValues2D.setValue(DefaultKeyedValues2D.java:341) 在 org.jfree.data.category.DefaultCategoryDataset.setValue(DefaultCategoryDataset.java:262) 在 org.jfree.data.category.DefaultCategoryDataset.setValue(DefaultCategoryDataset.java:278) 在 SV_ManagerDivision.SV_ManagerEmpPerformance.monthGraph(SV_ManagerEmpPerformance.java:577) 在 SV_ManagerDivision.SV_ManagerEmpPerformance.btnViewQIActionPerformed(SV_ManagerEmpPerformance.java:303) 在 SV_ManagerDivision.SV_ManagerEmpPerformance.access$200(SV_ManagerEmpPerformance.java:24) 在 SV_ManagerDivision.SV_ManagerEmpPerformance$3.actionPerformed(SV_ManagerEmpPerformance.java:159) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

我已经尝试了所有方法来解决它,甚至是这个 Stack Overflow 问题:Null 'key' argument,但它并没有帮助我解决问题。

此图生成的编码是:

PreparedStatement stmt = con.prepareStatement("select username, count(invoice_number) as invoiceCount, invoice_date from invoicedb where username = '" + empno + "' "
                    + "and extract(month from invoice_date) = '" + text + "' and extract(year from invoice_date) = '" + year + "'");
            ResultSet rs = stmt.executeQuery();
            DefaultCategoryDataset ddataset = new DefaultCategoryDataset();
            while (rs.next()) {
                ddataset.setValue(rs.getInt("invoiceCount"),
                       "invoiceCount",
                       rs.getString("username"));
            }
            stmt = con.prepareStatement("select username, count(quote_number) as quoteCount, quote_date from quotedb where username = '" + empno + "' and extract(month from quote_date) = '" + text + "'"
                    + " and extract(year from quote_date) = '"+ year +"'");
            rs = stmt.executeQuery();
            while (rs.next()) {
                ddataset.setValue(rs.getInt("quoteCount"),
                       "quoteCount",
                       rs.getString("username"));
            }

错误似乎在这一行:

ddataset.setValue(rs.getInt("invoiceCount"),

是我做错了什么还是有其他方法可以解决这个错误?

【问题讨论】:

  • 检测到 SQL 注入。使用参数绑定。
  • @lad2025 请原谅我的无知,但我该怎么做呢?
  • 然后至少显示堆栈跟踪的前 10 行。虽然我不明白发布这一切有什么难的。您无需键入它。只需复制并粘贴它。发布它很重要,因为它准确地说明了哪里出了问题。你问这个问题是因为你不知道如何阅读堆栈跟踪。
  • 我从未见过有人抱怨这里存在堆栈跟踪。而且我经常来。我看到的是人们抱怨发布了不相关的代码。但这根本不是一回事。当询问错误时,错误堆栈跟踪永远不会无关紧要。

标签: java mysql swing netbeans graph


【解决方案1】:

感谢堆栈跟踪,我现在知道您正在调用following method

因此,我可以阅读它的文档并看到它说:

参数:

value - the value.
rowKey - the row key (null not permitted).
columnKey - the column key (null not permitted).

异常消息说:

java.lang.IllegalArgumentException: Null 'key' 参数。在

因此,我们可以安全地假设传递给方法的参数之一(rowKeycolumnKey)为空。

rowKey 是文字字符串"quoteCount"。所以它显然不是空的。

columnKeyrs.getString("username")。这意味着您的查询返回的行之一为空 username

修复您的数据,或过滤掉 username 为空的行。

【讨论】:

  • 好的,我根据您所说的做了一些更改,并且修复了空键错误。但是现在 Y 轴值显示为指数值,X 轴上的文本显示为“0”而不是指定的文本,条形显示为图形中心的线条
  • 尝试推理为什么会发生这种情况。如果你被卡住了,再问一个问题,说你正在使用 JFreechart,展示你是如何创建图表的,你期望发生什么以及会发生什么。
  • 好的,我会这样做的。但至少该错误已停止出现,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 2013-04-02
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多