Ошибка аргумента «ключ» - PullRequest
       32

Ошибка аргумента «ключ»

8 голосов
/ 10 августа 2010

Я использую IReport 3.5.0, и мое приложение Java GWT использует скомпилированный файл .jasper для создания отчета. Я создаю источник данных в Java-приложении и использую метод fillReport() для заполнения отчета. Он отлично работает, он заполняет поля, которые я определил как в .jrxml, так и в приложении Java.

Однако я хочу использовать эти поля для создания круговой диаграммы, и она не работает. Я даю свои рабочие поля в качестве выражений ключа и значения для диаграммы, но когда я запускаю приложение, оно выдает ошибку java.lang.IllegalArgumentException: Null 'key' argument. Я не могу ее решить, даже когда я даю $V{PAGE_COUNT} в качестве ключевого выражения, оно всегда дает та же ошибка 'нулевого ключа'. Я застрял. Спасибо за любую помощь.

Ответы [ 4 ]

6 голосов
/ 19 августа 2010

У меня была такая же проблема.По сути, круговая диаграмма в JasperReport ненавидит нулевой объект.Сообщение об ошибке не очень помогает ...

Поскольку вы уже проверили выражение ключа, проверьте все остальные элементы.Моя ошибка была в выражении метки!

Если вы можете запустить свое приложение в IDE, установите точку останова на IllegalArgumentException.Это поможет вам найти основную причину.Также убедитесь, что отчет перекомпилирует jrxml каждый раз, когда вы вносите изменения.

Другой подход заключается в том, чтобы начать с примера и изменить его, чтобы постепенно соответствовать вашим потребностям.Вы скоро найдете виновника!

Кстати, это не имеет никакого отношения к GWT, так как все это выполняется на сервере.

3 голосов
/ 31 августа 2012

У меня была такая же проблема с iReport 3.0 Я использовал условные выражения для работы с нулевыми значениями в выражении ключа и выражении значения:

($F{FIELDEXPRESSION}!=null?$F{FIELDEXPRESSION}:"")

($F{FIELDVALUE}!=null?(new BigDecimal($F{FIELDVALUE})):(new BigDecimal("0")))
0 голосов
/ 01 июня 2015

Поскольку я не могу комментировать, возможно, это не полное разрешение.Я решил свою проблему, проверив типы данных полей.

Где у меня ранее было:

<field name="date" class="java.sql.Date"/>

Я изменил на:

<field name="date" class="java.lang.String"/>

, потому что мое поле будетдайте мне пример: "15 июля" (к вашему сведению, который я сделал в своем запросе) формат даты типа, который не может быть типа java.sql.Date.

0 голосов
/ 24 июля 2013

У меня была такая же проблема.Поэтому использовал цикл if, чтобы проверить, есть ли нулевое значение в столбце, который я обхожу.

  if(result.get()==null) // result is where is stored my resultset output
 {
    dataset.setValue(count.get(j),"N/A","No Data Available");} // count refers to the number of null entries
       else dataset.setValue(count.get(j),results.get(j),results.get(j)); 
   }
...