我正在尝试将项目从JDK8迁移到JDK11,问题是大多数事情不再像以前在JDK8中那样成为JDK11的一部分。 由于从JDK11中删除了这些软件包,我不得不手动添加一些分离的jar,但是仍然存在一个问题。 导入com.sun.imageio.plugins.jpeg.JPEGImageReader;不再是JDK11的一部分,并且我无法找到适当的替换或依赖项来提供给我的代码,因此它可以像以前一样工作。
我已经访问了文档https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/imageio/package-summary.html,但是它们似乎不是一个合适的替代品
InputStream iccProfileStream = JPEGImageReader.class.getResourceAsStream("/ISOcoated_v2_300_eci.icc");
///由于缺少从JDK11中删除的jar,JPEGImageReader完全变成红色
cmykProfile = ICC_Profile.getInstance(iccProfileStream);
iccProfileStream.close();
代码应像以前在JDK8上一样进行编译,但相反,它始终弹出错误消息“包com.sun.imageio.jpeg包不可见(包com.sun.imageio.plugins.jpeg包在模块java中声明。桌面,而不导出它)”
答案 0 :(得分:1)
至少基于显示的代码,您似乎甚至不需要该类。
只要任何JPEGImageReader.class.getResourceAsStream(..
对象都在适当的类加载上下文中,就可以使用它来代替Class
。 getResourceAsStream
类中存在Class
方法。
用getClass().getResourceAsStream(..
替换它,那部分代码就可以了。