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?
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?
-----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]