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)
Danke für den Downvote hilft. Könnten Sie bitte erläutern, warum Sie den Beitrag abgelehnt haben? –