0

I created a program to create a calendar as an svg image and it works just fine when I run it on windows, however when run on a mac it just creates an empty svg file. Can someone please help me figure out what is going on?

public void getSVG() throws IOException
    {
        DOMImplementation imp = SVGDOMImplementation.getDOMImplementation();
        String s = SVGDOMImplementation.SVG_NAMESPACE_URI;
        SVGDocument doc = (SVGDocument) imp.createDocument(s, "svg", null);
        SVGGraphics2D svgGen = new SVGGraphics2D(doc);
        String ss = findFile().getAbsolutePath();
        Writer out = new FileWriter(ss);
        this.paint(svgGen);
        svgGen.stream(out, true);
        out.flush();
        out.close();
    }

I haven't tried much of anything, as it works just fine on windows. I don't know why it would be different on Mac.

Update: I got the error log on Mac after setting up spring. Here it is.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at org.apache.batik.svggen.ImageHandlerBase64Encoder.encodeImage(ImageHandlerBase64Encoder.java:157)
at org.apache.batik.svggen.ImageHandlerBase64Encoder.handleHREF(ImageHandlerBase64Encoder.java:133)
at org.apache.batik.svggen.ImageHandlerBase64Encoder.handleHREF(ImageHandlerBase64Encoder.java:72)
at org.apache.batik.svggen.DefaultImageHandler.handleImage(DefaultImageHandler.java:63)
at org.apache.batik.svggen.SimpleImageHandler.handleImage(SimpleImageHandler.java:100)
at org.apache.batik.svggen.SVGGraphics2D.drawImage(SVGGraphics2D.java:676)
at com.apple.laf.AquaImageFactory$SlicedImageControl.paintStretchedMiddles(AquaImageFactory.java:389)
at com.apple.laf.AquaImageFactory$SlicedImageControl.paint(AquaImageFactory.java:377)
at com.apple.laf.AquaPainter$AquaNineSlicingImagePainter.paint(AquaPainter.java:128)
at com.apple.laf.AquaPainter.paint(AquaPainter.java:90)
at com.apple.laf.AquaScrollRegionBorder.paintBorder(AquaScrollRegionBorder.java:64)
at javax.swing.JComponent.paintBorder(JComponent.java:943)
at javax.swing.JComponent.paint(JComponent.java:1051)
at javax.swing.JComponent.paintChildren(JComponent.java:883)
at javax.swing.JComponent.paint(JComponent.java:1059)
at calendarmaker.Objects.Pane.getSVG(Pane.java:97)
at calendarmaker.Objects.Window.actionPerformed(Window.java:91)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:262)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3318)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

It seems that the null pointer is for the image. I don't know why.

1

1 Answer 1

0

I figured out that I had to add a dependency for batik codec. I forget the stack overflow post that I found it on, but it seems to be working now.

Not the answer you're looking for? Browse other questions tagged or ask your own question.