Batik 在 Mac 上创建空白 svg

问题描述 投票:0回答:1

我创建了一个程序来创建日历作为 svg 图像,当我在 Windows 上运行它时它工作得很好,但是当在 Mac 上运行时它只会创建一个空的 svg 文件。有人可以帮我弄清楚发生了什么事吗?

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();
    }

我还没有尝试过太多东西,因为它在 Windows 上运行得很好。我不知道为什么在 Mac 上会有所不同。

更新:设置 spring 后,我在 Mac 上收到错误日志。在这里。

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)

看来空指针是针对图像的。我不知道为什么。

java windows macos svg batik
1个回答
0
投票

我发现我必须添加蜡染编解码器的依赖项。我忘记了我找到它的堆栈溢出帖子,但它现在似乎可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.