# warum kann ich Jasper Komponeten nicht verwenden ?



## Joob (23. Jun 2018)

Folgender Code:

```
String jrxmlFileName = "REPORTS/Blocks.jrxml";

    JasperDesign jasperDesign;
        jasperDesign = JRXmlLoader.load(jrxmlFileName);
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
    Map<String, Object> map = new HashMap<>();
    Collection<RepBlocks> data;
        try {
            data = generateCollection();
        } catch (InstantiationException ex) {
            Logger.getLogger(BlocksHeaderController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(BlocksHeaderController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(BlocksHeaderController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(BlocksHeaderController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(BlocksHeaderController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (JSONException ex) {
            Logger.getLogger(BlocksHeaderController.class.getName()).log(Level.SEVERE, null, ex);
        };
      
    JRDataSource datasource = new JRBeanCollectionDataSource(data, true);
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, datasource);
    jv = new JRViewer(jasperPrint);
    add(jv, BorderLayout.CENTER);
```


ich kann die Jasperkomponeten nicht importieren,
obwohl ich die Jars im Projekt eingebunden habe, weiß jemand woran das liegen kann


----------



## mrBrown (24. Jun 2018)

Kannst du sie wirklich nicht importieren? An der Stelle meckert er nur über fehlende Imports...


----------



## Joob (24. Jun 2018)

Ich versteh nicht ganz, wenn ich die jars dem Projekt zugeordnet habe müsste man diese doch mit anklicken importieren können, da sie bekannt sind.

Das geht aber nicht, er will eine Klasse anlegen, was doch heißt er kennt die Klassen die über die jars dem Projekt hinzugefügt sind, nicht. Oder habe ich da ein Verständnisproblem ?

Leider kann ich keinen Screenshot schicken, aber das Verfahren ist ja klar.


----------



## Joob (24. Jun 2018)

Nachdem ich heute morgen netbeans gestartet habe, habe ich folgenden Hinweis bekommen.

Libary JasperReports is missing, als Lösungsvorschlag kam dann folgendes



wo bin ich denn da ?


----------



## Joob (24. Jun 2018)

Ich habs, neben den im Jasper download unter libs befindlichen jars gab es noch unter dist eine jar.
Wo kann ich herausfinden welche von den jars ich wirklich brauche ?

Ich will die Reports standardmäßig mit eine Collection von javabeans füllen.


----------



## Joob (24. Jun 2018)

Jetzt kommt aber wenn ich die Datasource verwenden will folgender Fehler:




Die JsonException wird verwendet weil ich die Daten vom Hoster hole, und dann die javabeans in der Collection speichere. 
Ist der Grund vielleicht das ich ireport dies irgendwie bekannt machen muss ?
Wie kann man das machen, mir würde nur der Classpath einfallen, dann müsste ich die java-json.jar eintragen damit ireport in seiner Funktion : sourccode - Erstellung einer temporären Datenbasis zur Berichtserstellung und zum Testen diese jar auch kennt.

Liege ich da richtig oder ist das falsch gedacht ?


----------



## Joob (24. Jun 2018)

Hab ich erst mal so gemacht, zumindesten die Fehlermeldung änder sich, die sagt mir aber nun gar nichts mehr.



Im Hintergrund ist die Collection, wie du siehst hab ich die auch getestet, und sie funktioniert wie sie soll, Daten in Beans siehst du ja über System out, und dann habe ich noch die Size geprüft, passt auch
leider ist die Fehlermeldung von Jasper sehr unspezifisch.

Die Zuordnung Classe und ihrer Methode hauen aber offensichtlich hin.
Kann ireports vielleicht nichts mit der java.util.collection anfangen.


----------



## mrBrown (24. Jun 2018)

Joob hat gesagt.:


> Ich habs, neben den im Jasper download unter libs befindlichen jars gab es noch unter dist eine jar.
> Wo kann ich herausfinden welche von den jars ich wirklich brauche ?





Joob hat gesagt.:


> Die JsonException wird verwendet weil ich die Daten vom Hoster hole, und dann die javabeans in der Collection speichere.
> Ist der Grund vielleicht das ich ireport dies irgendwie bekannt machen muss ?
> Wie kann man das machen, mir würde nur der Classpath einfallen, dann müsste ich die java-json.jar eintragen damit ireport in seiner Funktion : sourccode - Erstellung einer temporären Datenbasis zur Berichtserstellung und zum Testen diese jar auch kennt.



Üblicherweise würde man für sowas ein Build-Tool nutzen, was die Abhängkeiten automatisch managed und den Classpath passend setzt.




Joob hat gesagt.:


> Hab ich erst mal so gemacht, zumindesten die Fehlermeldung änder sich, die sagt mir aber nun gar nichts mehr.
> 
> Anhang anzeigen 10995
> 
> ...


Ehrlich gesagt erkenn ich auf dem Screenshot überhaupt nichts, der ist viel zu unleserlich...


----------



## Joob (24. Jun 2018)

tschuldigung ich mach das noch mal.


Das ist die Fehlermeldung.



Das ist der Verweis auf die Class.




Das ist die Definition.


```
public class BlocksCollector {
  
    public static java.util.Collection generateCollection() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException, IOException, JSONException {
  
        String idlanguage = "1";
        String[][] resultarray = rep_Blocks(idlanguage);
        java.util.Vector collection = new java.util.Vector();
      
        if ( !(resultarray == null) ) {
              
                for (int i=0 ; i<resultarray.length; i++) {
                  
                    collection.add(new RepBlocks(resultarray[i][0],
                                                    resultarray[i][1],
                                                    resultarray[i][2],
                                                    resultarray[i][3]) );
                  
                    System.out.println("Block in Collection : " + resultarray[i][1]);
                } 
            }
      
    return collection;
  }
```

und hier der Code.

Was ist ein Build-Tool ?
Wenn ich das richtig verstanden habe macht ireports das so, das man für das Reportdesign eine Datenbasis hat mit der man testen kann. Oder ist das anders gemeint.
Im Code gebe ich ja die Daten zur Runtime mit.


----------



## Joob (24. Jun 2018)

Bin jetzt weitergekommen.
DataSource funktioniert, aber nur wenn man das Array direkt in der Klasse erstellt, wenn auf das Gefüge Hosterdaten holen über die verschiedenen Klassen der App zugegriffen werden muss haut es nicht nicht hin.
Deshalb mein neuer Code.



```
public static ArrayList<RepBlocks> generateDataRepBlocks() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException, IOException, JSONException {
   
        String idlanguage = "1";
//        String[][] resultarray = rep_Blocks(idlanguage);
        String[][] resultarray = new String [3][4];
       
        resultarray[0][0] = "language0";
        resultarray[0][1] = "book0";
        resultarray[0][2] = "isbn0";
        resultarray[0][3] = "lesson0";
       
        resultarray[1][0] = "language1";
        resultarray[1][1] = "book1";
        resultarray[1][2] = "isbn1";
        resultarray[1][3] = "lesson1";
       
        resultarray[2][0] = "language2";
        resultarray[2][1] = "book2";
        resultarray[2][2] = "isbn2";
        resultarray[2][3] = "lesson2";
       
        ArrayList<RepBlocks> repdata = new ArrayList<>();
       
        if ( !(resultarray == null) ) {
               
                for (int i=0 ; i<resultarray.length; i++) {
                   
                    repdata.add(new RepBlocks(resultarray[i][0],
                                                    resultarray[i][1],
                                                    resultarray[i][2],
                                                    resultarray[i][3]) );
                   
                    System.out.println("Block in Collection : " + resultarray[i][1]);
                }  
            }
       
    return repdata;
   
  }
```

Dann kann ich den Designer nutzen um den Report zu erstellen. 
Meines Erachtens ist das aber alles etwas unübersichtlich.
Geht das auch einfacher, also meine Frage:
Mach ich da was falsch und was kann ich ändern.


----------



## mrBrown (26. Jun 2018)

Joob hat gesagt.:


> DataSource funktioniert, aber nur wenn man das Array direkt in der Klasse erstellt, wenn auf das Gefüge Hosterdaten holen über die verschiedenen Klassen der App zugegriffen werden muss haut es nicht nicht hin.


Ins blaue geraten: Irgendwo fliegt eine Exception.
Wrap das ganze mal in try-catch und lass dir auftretenden Exceptions loggen.


----------

