使用Batik 1.14与Java:如何正确导入模块或类?
解决Batik转码器导入及SVG转PNG问题
先修正你的代码导入错误
正确的导入语句应该替换你当前的所有导入:
// 正确的Batik转码器父类 import org.apache.batik.transcoder.Transcoder; import org.apache.batik.transcoder.TranscoderException; import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; // PNG/JPEG转码器在image子包下 import org.apache.batik.transcoder.image.PNGTranscoder; import org.apache.batik.transcoder.image.JPEGTranscoder; public class SVGConverter { ... // 替换原来的ImageTranscoder,用正确的Transcoder父类 Transcoder t; ... t = new JPEGTranscoder(); ... t = new PNGTranscoder(); ... }
注意:javax.imageio.ImageTranscoder和Batik的转码器完全无关,是Java ImageIO的类,必须删掉。
你的问题解答
1. 是否必须通过类路径使用Batik的类/jar包?
是。Batik 1.7和1.14都没有适配Java模块系统(JPMS),不属于模块化jar包。如果放在模块路径下,Java会将其视为「自动模块」,但容易出现依赖缺失、访问权限不足等问题,类路径是唯一可靠的使用方式。
2. 访问对应包和类的正确包名是什么?
正确的包名始终是org.apache.batik.transcoder前缀:
- 基础转码类:
org.apache.batik.transcoder.TranscoderInput、org.apache.batik.transcoder.TranscoderOutput、org.apache.batik.transcoder.TranscoderException - 图片转码器:
org.apache.batik.transcoder.image.PNGTranscoder、org.apache.batik.transcoder.image.JPEGTranscoder
你2013年用的org.apache.batik.transcoder.XXX是对的,现在失效大概率是jar包没正确加入类路径,不是包名变了。
3. 将对应jar包放入项目lib目录是否正确?
只把jar包放进lib目录还不够,必须确保构建工具/IDE把这些jar包加入类路径:
- IDE环境:比如IDEA/Eclipse,需要手动将lib目录下的jar包添加为项目依赖(IDEA右键lib目录→「Add as Library」;Eclipse右键项目→「Build Path」→「Add External Archives」)
- 手动编译运行:用
javac和java命令时,通过-cp参数指定类路径,比如:# 编译 javac -cp "lib/*" SVGConverter.java # 运行 java -cp "lib/*:." SVGConverter
另外不要同时放1.7和1.14的jar包,选一个版本(推荐1.14),避免版本冲突。
内容的提问来源于stack exchange,提问作者Dieter Profos
相关产品推荐
相关产品推荐

