2012-10-18 6 views
5

У меня есть несколько Отчеты Jasper (с подзаголовками) в моем приложении. По какой-то причине один отчет (который также содержит подзаголовки) больше не работает. После отладки более 1 дня я узнал, что он входит в бесконечный цикл и продолжает создавать потоки для заполнения суб-отчета.Отчеты Jasper: подчиненные отчеты вызывают бесконечный цикл

Отладчик продолжает цикл между:

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; 
} 

выше метод начинает тему для того, чтобы заполнить подотчет. После этого, устанавливает running = false и отладчик получает:

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(); 
    } 
} 

После того, как нить заканчивается, она получает метод subreportFiller.notifyAll(); линии выше в. Затем отладчик возвращается к JRSubreportRunnable.java и так далее.

Теоретически, если у меня есть 5 подзадач, он должен создать 5 потоков (работает для меня для других отчетов). К сожалению, для этого случая он продолжает создавать потоки, и мой отладчик «застревает» между двумя упомянутыми выше методами (FYI: классы относятся к jasperreports-3.7.6-sources.jar).

Также пробовал:

Я нашел similar StackOverflow question, но ответ предложил там не работает для меня. Ни одно из предлагаемых решений от this thread on the JasperSoft Community.

Я действительно не могу понять, почему эта проблема возникает. Я уверен, что это нечто второстепенное, как оно работало. Надеюсь, кто-то другой наткнулся на это и может решить. Заранее благодарим за любой ответ. (Я знаю, что я не предоставил очень много информации о содержании моих под-отчетов, но он довольно приватен, но я могу заверить вас, что содержание отчета и связанных с ним отчетов не изменилось - проверено с Git)

+1

Спасибо за downvote. Не могли бы вы прокомментировать объяснение, почему вы отказали в публикации? –

ответ

4

Я имел точно такую ​​же проблему и решить ее, изменив свойство isPrintWhenDetailOverflows моего подотчета от истины к ложному как предложено здесь: http://community.jaspersoft.com/questions/527078/infinite-loop-subreport-fill

надеюсь, что это помогает

+0

Спасибо за поздний ответ. Я пробовал это, честно говоря, я пробовал все, что мог найти, связанный с этим на SO и в сообществе JasperSoft, но это не сработало для меня. В настоящее время этот вопрос считается не большим приоритетом для моего проекта, поэтому я остановился (на некоторое время), просматривая его. Тем не менее, если кто-то придумает какие-то решения, я не нашел, что посмотрю на них. Заранее спасибо ! –

+0

Это сработало для меня, поэтому должен быть какой-то сценарий, который отличается, но поскольку этот пост был от 4 лет назад, это не имеет большого значения, просто говоря, что это работает в некоторых обстоятельствах :) – CodeMonkey

Смежные вопросы