Hi -

  I am getting some text from a database and drawing it on a JSVGCanvas and then adding some decorations, e.g. highlighting in the form of partially transparent rectangles over the text.  Originally I tried to create the whole svg document in memory then set it to be displayed but this failed, sometimes, because I used aTextElementNode.getBounds().getWidth() to determine the size of a line and I suppose the size was undefined because the text hadn’t been rendered yet.  I put all of these render-sensitive calls inside a block like this:

 

canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {

            public void gvtRenderingCompleted(GVTTreeRendererEvent e) {

                      doHighLighting();

                   // …   doOtherTextDecorations();

                   // …and handle clicks on text and changes to highlighting

            }

        });

 

and it seems to have solved that problem, although it seems a bit strange to have basically put the entire rest of the program inside the GVTTreeRendererListener.  However, two new problems came up:

1st: The highlight boxes only appear after you move the mouse over the JSVGCanvas.

2nd: If the enclosing JFrame is resized, the following error occurs.  The OutOfMemory line appears once, the next section is repeated over and over a couple hundred times.

 

java.lang.OutOfMemoryError

java.lang.IllegalStateException: RunnableQueue not started or has exited

            at org.apache.batik.util.RunnableQueue.invokeLater(Unknown Source)

            at org.apache.batik.swing.svg.JSVGComponent$SVGListener.dispatchMouseEntered(Unknown Source)

            at org.apache.batik.swing.gvt.JGVTComponent$Listener.mouseEntered(Unknown Source)

            at java.awt.AWTEventMulticaster.mouseEntered(AWTEventMulticaster.java:237)

            at java.awt.Component.processMouseEvent(Component.java:5030)

            at java.awt.Component.processEvent(Component.java:4818)

            at java.awt.Container.processEvent(Container.java:1525)

            at java.awt.Component.dispatchEventImpl(Component.java:3526)

            at java.awt.Container.dispatchEventImpl(Container.java:1582)

            at java.awt.Component.dispatchEvent(Component.java:3367)

            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3359)

            at java.awt.LightweightDispatcher.trackMouseEnterExit(Container.java:3199)

            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3056)

            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3004)

            at java.awt.Container.dispatchEventImpl(Container.java:1568)

            at java.awt.Window.dispatchEventImpl(Window.java:1581)

            at java.awt.Component.dispatchEvent(Component.java:3367)

            at java.awt.EventQueue.dispatchEvent(EventQueue.java:445)

            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:191)

            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:144)

            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)

            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:130)

            at java.awt.EventDispatchThread.run(EventDispatchThread.java:98)

 

  If anyone has any input on either of these problems it would be appreciated.

-Randy