warum kann ich Jasper Komponeten nicht verwenden ?

Joob

Top Contributor
Folgender Code:
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

upload_2018-6-23_22-53-27.png
 
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.
 
Nachdem ich heute morgen netbeans gestartet habe, habe ich folgenden Hinweis bekommen.

Libary JasperReports is missing, als Lösungsvorschlag kam dann folgendes
upload_2018-6-24_13-29-59.png


wo bin ich denn da ?
 
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.
 
Jetzt kommt aber wenn ich die Datasource verwenden will folgender Fehler:

upload_2018-6-24_13-51-34.png


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 ?
 
Hab ich erst mal so gemacht, zumindesten die Fehlermeldung änder sich, die sagt mir aber nun gar nichts mehr.

upload_2018-6-24_14-3-53.png

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.
 
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 ?
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.


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

Anhang anzeigen 10995

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.
Ehrlich gesagt erkenn ich auf dem Screenshot überhaupt nichts, der ist viel zu unleserlich...
 
tschuldigung ich mach das noch mal.

upload_2018-6-24_16-5-44.png
Das ist die Fehlermeldung.

upload_2018-6-24_16-6-15.png

Das ist der Verweis auf die Class.


upload_2018-6-24_16-7-30.png

Das ist die Definition.

Code:
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.
 
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.


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.
 
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.
 

Neue Themen


Zurück
Oben