2012-10-18 4 views
5

Ich habe mehrere Jasper Reports (mit Sub-Berichte) in meiner gesamten Anwendung. Aus irgendeinem Grund funktioniert ein Bericht (der auch Unterberichte enthält) nicht mehr. Nach dem Debuggen von mehr als einem Tag fand ich heraus, dass es in eine Endlosschleife übergeht und Threads zum Füllen von Unterberichten erstellt.Jasper Reports: Sub-Berichte verursachen eine Endlosschleife

Debugger hält Looping zwischen:

JRSubReportRunnable.java

public void run() 
{ 
    running = true;  
    error = null; 

    try 
    { 
     fillSubreport.fillSubreport(); 
    } 
    catch (JRFillInterruptedException e) 
    { 
     //If the subreport filler was interrupted, we should remain silent 
    } 
    // we have to catch Throwable, because it is difficult to say what would happen with the master 
    // filler thread in case we don't 
    catch (Throwable t) //NOPMD 
    { 
     error = t; 
    } 

    running = false; 
} 

Das oben beschriebene Verfahren einen Thread, um startet einen Unterbericht zu füllen. Das erledigt, setzt running = false und der Debugger bekommt auf:

JRThreadSubreportRunner.java

public void run() 
{ 
    super.run(); 

    if (log.isDebugEnabled()) 
    { 
     log.debug("Fill " + subreportFiller.fillerId + ": notifying of completion"); 
    } 

    synchronized (subreportFiller) 
    { 
     //main filler notified that the subreport has finished 
     subreportFiller.notifyAll(); 
    } 
} 

Sobald die Gewinde endet, wird es auf die Methode des oben subreportFiller.notifyAll(); Linie. Dann geht der Debugger zurück zu JRSubreportRunnable.java und so weiter.

Theoretisch, wenn ich 5 Sub-Berichte habe, sollte es 5 Threads erstellen (funktioniert für mich für andere Berichte). Unglücklicherweise bleibt es für diesen Fall, Threads zu erstellen, und mein Debugger "bleibt" zwischen den beiden oben genannten Methoden stecken (FYI: Die Klassen stammen aus der jasperreports-3.7.6-sources.jar).

auch versucht:

ich ein similar StackOverflow question gefunden, aber die Antwort vorgeschlagen es nicht für mich arbeiten. Auch keine der vorgeschlagenen Lösungen von this thread on the JasperSoft Community.

Ich kann wirklich nicht verstehen, warum dieses Problem auftritt. Ich bin mir sicher, dass es etwas Minderwertiges ist, wie es früher üblich war. Hoffentlich ist jemand anderes darauf gestoßen und könnte eine Lösung haben. Vielen Dank im Voraus für eine Antwort. (Ich weiß, dass ich nicht wirklich viele Informationen über den Inhalt meiner Unterberichte bereitgestellt habe, aber es ist ziemlich privat; trotzdem kann ich Ihnen versichern, dass sich der Inhalt des Berichts und der zugehörigen Unterberichte nicht geändert hat - geprüft mit Git wie hier vorgeschlagen)

+1

Danke für den Downvote hilft. Könnten Sie bitte erläutern, warum Sie den Beitrag abgelehnt haben? –

Antwort

4

hatte ich genau das gleiche Problem und löste es durch die isPrintWhenDetailOverflows Eigenschaft meiner subreport von true in false Wechsel: http://community.jaspersoft.com/questions/527078/infinite-loop-subreport-fill

hoffen, dass es

+0

Danke für die späte Antwort. Ich habe es versucht, ehrlich gesagt, habe ich versucht, alles, was ich dazu finden konnte, auf SO und auf JasperSoft Community zu finden, aber es hat nicht für mich funktioniert. Momentan wurde dieses Problem für mein Projekt nicht als große Priorität angesehen, daher habe ich (einige Zeit) damit aufgehört, darüber zu schauen. Nichtsdestotrotz, wenn jemand mit einigen Lösungen kommt, die ich nicht gefunden habe, werde ich über sie schauen. Danke im Voraus ! –

+0

Das hat für mich funktioniert, also muss es ein Szenario geben, das anders ist, aber da dieser Beitrag vor 4 Jahren war, ist es nicht wirklich wichtig, nur zu sagen, dass es unter bestimmten Umständen funktioniert :) – CodeMonkey