Jasper-Berichte: JRBeanCollectionDataSource kann nicht in einen Typ aufgelöst werden

Ich erstelle ein Diagramm in iReports und erhalte beim Kompilieren in Eclipse die folgende Fehlermeldung:

net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. net.sf.jasperreports.engine.JRBeanCollectionDataSource cannot be resolved to a type
            value = new     net.sf.jasperreports.engine.JRBeanCollectionDataSource(((java.lang.String)field_chartData46xAxis.getValue())); //$JR_EXPR_ID=11$
                        <---------------------------------------------------->
2. net.sf.jasperreports.engine.JRBeanCollectionDataSource cannot be resolved to a type
            value = new net.sf.jasperreports.engine.JRBeanCollectionDataSource(((java.lang.String)field_chartData46xAxis.getOldValue())); //$JR_EXPR_ID=11$
                        <---------------------------------------------------->
3. net.sf.jasperreports.engine.JRBeanCollectionDataSource cannot be resolved to a type
            value = new net.sf.jasperreports.engine.JRBeanCollectionDataSource(((java.lang.String)field_chartData46xAxis.getValue())); //$JR_EXPR_ID=11$
                        <---------------------------------------------------->3 errors

at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:204)
at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:240)
at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:173)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:448)
at org.reportprotojava.protosheet.Program.main(Program.java:122)

Ich komme an einem vorbeiAnordnungsliste vonProtoReport (nur eine im Moment während ich teste) auf den Jasper Compiler. DasProtoReport Klasse enthält aChartData Klasse, die wiederum zwei hatAnordnungsliste vom Typ Double, eine für die X-Achse und eine für die Y-Achse.
Die Definitionen derProtoReport, ChartData Klassen undHauptprogramm sind wie folgt (leicht gekürzt):

ProtoReport Klasse:

package org.reportprotojava.protosheet;

import java.util.ArrayList;

public class ProtoReport {


private String outputFileName;
private String title;
private String logoLocation;
private String paragraphText;
private ArrayList<String> tableData;
private String picLocation;
private int[][] graphData;  //TODO decide how to store chart data
private ChartData chartData;
private String path;




//default constructor
public ProtoReport() {

    // Initialize object fields
    outputFileName = "PrototypeReport";
    title = "Prototype Report";
    paragraphText = "Default text";

    tableData = new ArrayList<String>();
    chartData = new ChartData();

    //set path to working directory
    path = System.getProperty("user.dir");

    //default to assumed report location 
    //(ie same folder as .jrxml and .jasper files)
    logoLocation = path + "\\reports\\logo.jpg";
    picLocation = path + "\\reports\\pic.jpg";

}

ChartData Klasse:

package org.reportprotojava.protosheet;

import java.util.ArrayList;

public class ChartData {

private ArrayList<Double> xAxis;
private ArrayList<Double> yAxis;
/**
 * @param xAxis
 * @param yAxis
 */

//default constructor
public ChartData(){
    xAxis = new ArrayList<Double>();
    yAxis = new ArrayList<Double>();
}



//constructor
public ChartData(ArrayList<Double> xAxis, ArrayList<Double> yAxis) {
    super();
    this.xAxis = xAxis;
    this.yAxis = yAxis;
}

Hauptprogramm

public class Program {

/**
 * @param args
 * 
 *Program runs our ProtoReport class and its supporting classes 
 * In the end we will have generated a .pdf from the 
 * previously defined .jrxml file
 */

//Generate some random data for the chart
public static ArrayList<Double> randomData(int size) {
    ArrayList<Double> arrayList = new ArrayList<Double>();
    double randNumber;

    for (int i = 0; i < size; i++) {
        randNumber = Math.random();
        arrayList.add(randNumber);
    }

    return arrayList;
}

public static void main(String[] args) {

    ArrayList<ProtoReport> listOfReports = new ArrayList<ProtoReport>();

    ProtoReport protoReport1 = new ProtoReport();
    ProtoReport protoReport2 = new ProtoReport();

 //Simple Fields and text
    protoReport1.setTitle("Example<br/>Fact Sheet");

    protoReport1.setLogoLocation(protoReport1.getPath() + "\\reports\\logo.gif");

 ChartData chartData = new ChartData();
    chartData.setYAxis(randomData(20));
    for (Double i = (double) 0; i < chartData.getYAxis().size(); i++) {
        chartData.getXAxis().add(i);
    }

        protoReport1.setChartData(chartData);  
 String jrxmlLocation = protoReport1.getPath() 
                    + "\\reports\\ReportPrototype.jrxml";
    String outputFileName = protoReport1.getPath() 
            + "\\reports\\generated\\" + protoReport1.getOutputFileName() + ".pdf";

    listOfReports.add(protoReport1);

//and wrap the ArrayList in a JRBeanCollectionDataSource
    JRBeanCollectionDataSource beanBurritoWrap = new JRBeanCollectionDataSource(listOfReports);

    //build the jasper report
    JasperReport jasperReport;
    JasperPrint jasperPrint;
    HashMap<String, Object> hashMap = new HashMap<>();
    boolean reportCreated;

    try {

        jasperReport = JasperCompileManager.compileReport(jrxmlLocation);
        jasperPrint = JasperFillManager.fillReport(jasperReport, hashMap, beanBurritoWrap);
        JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName);
        reportCreated=true;
    }
    catch (JRException e) {
          e.printStackTrace();
          reportCreated=false;
    }

}

Ich habe das Problem gegoogelt und mir etwas ausgedachtdiese unddieseund lese dieAbschnitt über Datenquellen in Jasper SourceForge Aber keines davon hat zur Lösung des Problems beigetragen, und ich habe mich vergewissert, dass ich es verwendet habe

 new net.sf.jasperreports.engine.JRBeanCollectionDataSource($F{chartData.xAxis})

in meinem Diagrammdatenquellenausdruck (und aktualisiert ihn, wenn ich Feldnamen ändere) und die Felder werden auf das Zeichen gesetztListe Geben Sie die iReport-Eigenschaften ein.

Hier ist mein.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="ReportPrototype.jrxml" pageWidth="595" pageHeight="842" columnWidth="495" leftMargin="57" rightMargin="43" topMargin="43" bottomMargin="43" uuid="10825c57-f953-4166-bf03-8ecabe8a8f47">
<property name="ireport.zoom" value="0.75"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="232"/>
<subDataset name="ChartData" uuid="fc9ec0af-3e1a-40a7-8eb4-9ad30a266dee">
    <field name="chartData.xAxis" class="java.lang.String"/>
</subDataset>
<queryString language="SQL">
    <![CDATA[]]>
</queryString>
<field name="title" class="java.lang.String"/>
<field name="logoLocation" class="java.lang.String"/>
<field name="picLocation" class="java.lang.String"/>
<field name="chartData.xAxis" class="java.lang.String"/>
<detail>
    <band height="740" splitType="Stretch">
        <textField isStretchWithOverflow="true" pattern="">
            <reportElement uuid="519c6bb5-72f9-4c25-8e91-47865ae0c9df" mode="Opaque" x="39" y="75" width="378" height="45" forecolor="#000099"/>
            <textElement textAlignment="Center" verticalAlignment="Middle" markup="html">
                <font size="26"/>
            </textElement>
            <textFieldExpression><![CDATA[$F{title}]]></textFieldExpression>
        </textField>
        <image onErrorType="Icon">
            <reportElement uuid="3759a707-32a4-49ef-a9c6-b0ad7136f738" x="216" y="264" width="279" height="246"/>
            <imageExpression><![CDATA[$F{picLocation}]]></imageExpression>
        </image>
        <image onErrorType="Icon">
            <reportElement uuid="f989f871-32ea-4f13-ae3f-3f487cde76dd" x="295" y="0" width="200" height="42"/>
            <imageExpression><![CDATA[$F{logoLocation}]]></imageExpression>
        </image>
        <xyLineChart>
            <chart>
                <reportElement uuid="ae87fc13-b92e-4a2a-b218-d395343f6028" x="0" y="537" width="495" height="203"/>
                <chartTitle/>
                <chartSubtitle/>
                <chartLegend/>
            </chart>
            <xyDataset>
                <dataset>
                    <datasetRun subDataset="ChartData" uuid="de7fb84d-17ea-4e5e-82bf-2015e72e4982">
                        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JRBeanCollectionDataSource($F{chartData.xAxis})]]></dataSourceExpression>
                    </datasetRun>
                </dataset>
            </xyDataset>
            <linePlot>
                <plot/>
            </linePlot>
        </xyLineChart>
    </band>
</detail>
<pageFooter>
    <band height="16">
        <break>
            <reportElement uuid="0d30dea4-a6af-4e41-b7be-c288f3188dbf" x="0" y="11" width="100" height="1"/>
        </break>
    </band>
</pageFooter>

In iReports habe ich versucht:
- Felder erstellen und benennenProtoReport.ChartData.xAxis undProtoReport.ChartData.yAxis unter Felderund die Felder unter demChartData Quelle habe ich hinzugefügt
-Umbenennen der Felder inChartData.xAxis undChartData.yAxis
-Umbenennen der Felder inchartData.xAxis undchartData.yAxis
-Nur mit den Feldern unter Feld
-Nur mit den Feldern unter ChartData - Fields

Alle geben mir einen Fehler. Irgendwelche Ideen, was ich falsch mache?

Weitere Fragen:
-Wie es aussieht, wird mein Diagramm wahrscheinlich nur die xAxis-Datenpunkte erzeugen. Wie kann ich den Inhalt von einem verwendenAnordnungsliste für die X-Achse und die andere für die Y-Achse? dh meinexAchse undyAchse Felder inChartData Objekt.
-DasrandomData () Methode, die ich vorher deklariert habeMain würde nicht rennen, bis ich es erklärt habestatisch, Warum das?

Bearbeiten
Um meine Frage klarer zu formulieren: Wie benenne ich meine Felder, richte meine Datenquellen ein und konfiguriere meine Datensätze, um dieses Problem zu lösen?
Ich folge dem Tutorial in den Kommentaren (Entschuldigung für den Nicht-Hyperlink; als neuer Benutzer habe ich bereits alle meine Hyperlinks verwendet) und ändere es für meine Bedürfnisse, aber seine Datenstruktur ist einfacher als meine und ich möchte lernen, wie man mit komplexeren Objekten und Datensätzen in Jasper-Berichten umgeht.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage