Hi Stephan,
The problem here is that the UpdateManager thread has to
be locked while you are rendering the document. Otherwise
it tries to update the GVT tree 'out from under you'.
This is really quite tricky because depending on the code
running in the UpdateManager thread it may need access to the
Swing thread (to query the JSVGCanvas for example). This means
that it is not a good idea to try and wait for a runnable to
complete from the swing thread (as this may cause a deadlock).
The best thing you could do is probably use
component.getGraphics from the update manager...
[EMAIL PROTECTED] wrote:
Hello,
I want to paint a SVG directly on a Graphics2D (including dynamic SVG),
without creating first a BufferedImage. Therefore I do not want to use the
DynamicRenderer. I tried it this way:
// adapt UpdateManager
class UpManager extends UpdateManager
{
public UpManager(BridgeContext b, GraphicsNode g, Document d) {
super(b, g, d);
}
protected void updateRendering(List l)
{}
protected void repaint() {
centerPanel.repaint();
}
}
class Panel extends JPanel
{
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
if (gvtRoot != null) {
gvtRoot.paint(g2d);
}
}
GraphicsNode gvtRoot;
}
But there seems to be a threading problem doing it this way, because
sometimes I get an NullPointerException. So are there any restrictions for
using the
GraphicsNode.paint()-method concerning threads?
at java.awt.geom.RectangularShape.intersects(Unknown Source)
at org.apache.batik.gvt.AbstractGraphicsNode.getBounds(Unknown Source) at
org.apache.batik.gvt.AbstractGraphicsNode.paint(Unknown Source) at
org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(Unknown
Source)
at org.apache.batik.gvt.AbstractGraphicsNode.paint(Unknown Source) at
gui.TestAbleitung$Panel.paintComponent(TestAbleitung.java:312) at
javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source) at
javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown
Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at
java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Thanks for any help!
Stephan
---------------------------------------------------------------------
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]