2013-06-27 8 views
2

Поскольку я обновлялся до JRE 1.7.0_25, батик генерирует исключения при применении преобразований.Batik терпит неудачу при преобразованиях с JRE 1.7.0_25

StackTrace является:

java.awt.image.ImagingOpException: Unable to transform src image 
at java.awt.image.AffineTransformOp.filter(Unknown Source) 
at org.apache.batik.ext.awt.image.rendered.AffineRed.genRect(AffineRed.java:193) 
at org.apache.batik.ext.awt.image.rendered.AffineRed.copyData(AffineRed.java:109) 
at org.apache.batik.ext.awt.image.rendered.PadRed.copyData(PadRed.java:88) 
at org.apache.batik.ext.awt.image.rendered.PadRed.copyData(PadRed.java:88) 
at org.apache.batik.ext.awt.image.rendered.Any2sRGBRed.copyData(Any2sRGBRed.java:166) 
at org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526) 
at org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:264) 
at org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:455) 
at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:549) 
at org.apache.batik.gvt.ShapeNode.paint(ShapeNode.java:143) 
at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165) 
at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509) 
at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165) 
at org.apache.batik.gvt.filter.GraphicsNodeRed8Bit.genRect(GraphicsNodeRed8Bit.java:140) 
at org.apache.batik.gvt.filter.GraphicsNodeRed8Bit.copyData(GraphicsNodeRed8Bit.java:116) 
at org.apache.batik.ext.awt.image.rendered.PadRed.copyData(PadRed.java:88) 
at org.apache.batik.ext.awt.image.rendered.Any2LsRGBRed.copyData(Any2LsRGBRed.java:109) 
at org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:526) 
at org.apache.batik.ext.awt.image.rendered.CompositeRed.genRect(CompositeRed.java:188) 
at org.apache.batik.ext.awt.image.rendered.CompositeRed.copyData(CompositeRed.java:139) 
at org.apache.batik.ext.awt.image.rendered.Any2sRGBRed.copyData(Any2sRGBRed.java:166) 
at org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:347) 
at org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:455) 
at org.apache.batik.ext.awt.image.renderable.PadRable8Bit.paintRable(PadRable8Bit.java:135) 
at org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:440) 
at org.apache.batik.ext.awt.image.renderable.PadRable8Bit.paintRable(PadRable8Bit.java:135) 
at org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:440) 
at org.apache.batik.ext.awt.image.renderable.FilterChainRable8Bit.paintRable(FilterChainRable8Bit.java:251) 
at org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:440) 
at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:549) 
at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165) 
at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509) 
at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165) 
at org.apache.batik.gvt.CanvasGraphicsNode.primitivePaint(CanvasGraphicsNode.java:159) 
at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509) 
at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165) 
at org.apache.batik.gvt.filter.GraphicsNodeRed8Bit.genRect(GraphicsNodeRed8Bit.java:140) 
at org.apache.batik.gvt.filter.GraphicsNodeRed8Bit.copyData(GraphicsNodeRed8Bit.java:116) 
at org.apache.batik.ext.awt.image.rendered.TranslateRed.copyData(TranslateRed.java:105) 
at org.apache.batik.gvt.renderer.DynamicRenderer.repaint(DynamicRenderer.java:244) 
at org.apache.batik.gvt.renderer.StaticRenderer.repaint(StaticRenderer.java:344) 
at org.apache.batik.swing.gvt.GVTTreeRenderer.run(GVTTreeRenderer.java:123) 

Исключение брошено в this line in AffineRed.java.

Кто-нибудь может это исправить или это временная ошибка в JRE?

ответ

3

Это regression в Java 7 Обновление 25. Усугубляюще, Oracle ищет возможность отсрочить исправление для регрессии до обновления 60. Это не похоже на то, что кто-то зависит от Java. Спасибо, Oracle!

Там краткое описание в this post из списка рассылки Батик о том, как избежать этой проблемы:

Единственный способ решения проблемы я смог найти до сих пор не латать батик источники больше не называют BufferedImageOp. фильтруйте непосредственно по источнику и целевому изображению, но для фильтрации двух копий ARGB BufferedImage.

К сожалению, это означает, что необходимо сделать копии исходных и целевых изображений, если они не являются ARGB.

+0

Спасибо, я уже читал о регрессии. Фиксирование Батик - ха-ха, на протяжении многих лет прогресс не достигнут. – Stephan

+0

В Батике нечего исправить. Это не их ошибка. В этом случае Batik использует Java по спецификации. – uckelman

+1

Томас (парень, который написал этот пост) любезно прислал мне патч к источникам Батика, который исправляет эту проблему. Он еще не ответил на мое письмо, поэтому я не публикую его, но если кто-то еще сталкивается с этой проблемой, пингуйте меня по электронной почте. –

3

Thomas Behr (парень, который написал this post) создал исправление, исправляющее проблему с использованием обходного пути, описанного в sibling answer.

Он любезно отправил его мне, когда я спросил его, а так как многие люди связались со мной по поводу этого патча, я решил добровольно его опубликовать, что Томас не против.

Нанесите его поверх Batik 1.7 источников, и вы должны быть хорошо.

+0

Спасибо, я попробую. – Stephan