ICEpdf
  1. ICEpdf
  2. PDF-942

IndexOutOfBoundsException in PageViewComponentImpl - when painting the annotations

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 5.1.1, 6.0
    • Fix Version/s: 6.0.2
    • Component/s: Viewer RI
    • Labels:
      None
    • Environment:
      Windows, Eclipse RCP

      Description

      In our application, we work a lot with annotations to highlight the most important parts of the PDF for our user.

      The IcePDF viewer tries to paint the annotations when the PDF page is first loaded in the {{PageViewComponentImpl.paintAnnotations()}}. There is a {{for}} loop in this method, which can not properly deal with concurrency and leads to the following exception. This exception sometimes leads to the freezing of the entire IcePdf component and our application.

      Note that our application performs all the GUI operations related to ICEPDF inside a {{SwingUtilities.invokeLater()}} to make sure it can only be performed withing the {{AWT}} thread. However, the it is still possible that an annotation is removed before the loop in the {{paintAnnotations()}} method is finished.


      {quote}
      Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 15, Size: 15
      at java.util.ArrayList.rangeCheck(ArrayList.java:635)
      at java.util.ArrayList.get(ArrayList.java:411)
      at org.icepdf.ri.common.views.PageViewComponentImpl.paintAnnotations(PageViewComponentImpl.java:524)
      at org.icepdf.ri.common.views.PageViewComponentImpl.paintComponent(PageViewComponentImpl.java:463)
      at javax.swing.JComponent.paint(JComponent.java:1054)
      at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
      at javax.swing.JComponent.paintChildren(JComponent.java:887)
      at javax.swing.JComponent.paint(JComponent.java:1063)
      at org.icepdf.ri.common.views.PageViewDecorator.paint(PageViewDecorator.java:141)
      at javax.swing.JComponent.paintChildren(JComponent.java:887)
      at javax.swing.JComponent.paint(JComponent.java:1063)
      at javax.swing.JComponent.paintToOffscreen(JComponent.java:5219)
      at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1529)
      at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452)
      at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
      at javax.swing.JComponent._paintImmediately(JComponent.java:5167)
      at javax.swing.JComponent.paintImmediately(JComponent.java:4978)
      at javax.swing.RepaintManager$3.run(RepaintManager.java:808)
      at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
      at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
      at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
      at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
      at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
      at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
      at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
      at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
      at java.awt.EventQueue.access$200(EventQueue.java:103)
      at java.awt.EventQueue$3.run(EventQueue.java:694)
      at java.awt.EventQueue$3.run(EventQueue.java:692)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
      at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
      at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
      {quote}

        Activity

        Pouya Yanki created issue -
        Patrick Corless made changes -
        Field Original Value New Value
        Fix Version/s 6.0.2 [ 12971 ]
        Patrick Corless made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Patrick Corless made changes -
        Status Resolved [ 5 ] Closed [ 6 ]

          People

          • Assignee:
            Patrick Corless
            Reporter:
            Pouya Yanki
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: