> -----Original Message----- > From: Thomas DeWeese [mailto:[EMAIL PROTECTED] > Sent: Tuesday, September 09, 2003 6:12 PM > To: Batik Users > Subject: Re: Waiting for RenderingCompleted > > > Grant Mc Auley wrote: > > Thank you for your quick reply. > > > > I had already tried this (and just double checked it again) but the > > mutex apparently never gets notified, the thread waits indefinitely. > > That was why I was asking about how the GVTTreeBuilder > thread is related > > to the main thread. I have even tried spawning a thread > from the main > > thread and locking on the mutex from it, but it hangs also. > > Is 'notifyAll' getting called?
No. It looks like the event does not even get fired. This is the state of the GVTTreeBuilder thread when the main thread is waiting (ie, mutex.wait() ): org.apache.batik.util.EventDispatcher org.apache.batik.swing.gvt.GVTTreeRenderer.fireEvent() org.apache.batik.swing.gvt.GVTTreeRenderer.run() When I do not use the mutex and use a breakpoint in renderingCompleted() I see this when stopped at the breakpoint: java.awt.EventQueue.postEventPrivate() java.awt.EventQueue.postEvent() java.awt.EventQueue.invokeAndWait() org.apache.batik.util.EventDispatcher org.apache.batik.swing.gvt.GVTTreeRenderer.fireEvent() org.apache.batik.swing.gvt.GVTTreeRenderer.run() So, somehow the waiting main thread seems to prevent the posting of the event from the TreeBuilder thread. > > The GVTTreeBuilder is a seperate thread but I believe it > notifies in the > AWT event thread. > > > Without the wait/notify the renderingCompleted() returns OK > and I can > > see the main thread wait()ing in my debugger. So it seems that the > > trouble is from the GVTTreeBuilder event handler end. > > Does it get into they sync blocks? It gets into the first, and the main thread waits. But as mentioned above, the event does not seem to get posted. A deadlock would occur if the AWT Event thread was wait()ing for the wait()ing main thread. I wonder if this occurs for applets. In other words, is the AWT Event thread suspended until init() returns? > > >>-----Original Message----- > >>From: Thomas DeWeese [mailto:[EMAIL PROTECTED] > >>Sent: Tuesday, September 09, 2003 4:50 PM > >>To: Batik Users > >>Subject: Re: Waiting for RenderingCompleted > >> > >> > >>Grant Mc Auley wrote: > >> > >>>I need to ensure that the UpdateManager and all SVG element > >> > >>are not null > >> > >>>and available before an Applet's init() method returns in the code > >>>below. In other words, I need to delay init() from returning until > >>>gvtRendingCompleted() is called. > >>> > >>>Does anybody have any suggestions on how I might > accomplish this? I > >>>have tried many approaches but to no avail. I am unclear about the > >>>relationship between the GVTTreeBuilder thread and the main > >> > >>thread. Any > >> > >>>help with this would be much appreciated as I am facing a deadline. > >> > >> You need to setup a mutex and wait on it, you probably also want > >>to check for failed/interrupted conditions: > >> > >>Object mutext = new Object; > >> canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() { > >>public void gvtRenderingCompleted(GVTTreeRendererEvent e) { > >> // . . . > >> > >> synchronized (mutext) { > >> mutex.notifyAll(); > >> } > >> } > >> > >>synchronized (mutext) { > >> canvas.setDocument(doc); > >> try { > >> mutext.wait(); > >> catch(InterruptedException ie) { > >> ie.printStackTrace(); > >> } > >>} > >> > >> > >> > >>> > >>>//---------------------------------------------------------------- > >>> > >>>init() { > >>> > >>> File f = new File("file.svg"); > >>> canvas = new JSVGCanvas(); > >>> canvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() { > >>> > >>> public void gvtRenderingCompleted(GVTTreeRendererEvent e) { > >>> > >>> um = canvas.getUpdateManager(); > >>> element = doc.getElementByID("name"); > >>> . . . > >>> > >>> } > >>> > >>> }); > >>> canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC); > >>> String parser = XMLResourceDescriptor.getXMLParserClassName(); > >>> SAXSVGDocumentFactory factory = new > SAXSVGDocumentFactory(parser); > >>> doc = factory.createDocument(f.toURL().toString()); > >>> canvas.setDocument(doc); > >>> > >>> // delay goes here > >>> > >>>} > >>> > >>>//---------------------------------------------------------------- > >>> > >>> > >>> > >>> > >> > >>------------------------------------------------------------ > --------- > >> > >>>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>For additional commands, e-mail: [EMAIL PROTECTED] > >>> > >>> > >> > >> > >> > >> > >>------------------------------------------------------------ > --------- > >>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]