我有一个Java程序 当我编译它时,我得到以下错误
[javac] ...\MyClass.java:33: package com.sun.image.codec.jpeg does not exist
[javac] import com.sun.image.codec.jpeg.*;
[javac] ^
我该怎么办?
现在不推荐使用com.sun软件包,编写映像文件的正确方法是什么。
答案 0 :(得分:50)
在使用JDK 7进行编译时遇到了这个问题。奇怪的Eclipse没有显示此错误,只有javac这样做。答案可以找到in this Stackoverflow answer:javac使用一个不包含所有Sun专有类的特殊符号表,并且提供-XDignore.symbol.file
会使问题消失。
当然,更好的解决方案是在不使用专有类的情况下重写代码,但为了快速支持JDK 7,此选项可以正常工作。
答案 1 :(得分:33)
为什么要使用包com.sun.image.codec.jpeg
中的类?您不应该直接使用这些类:Why Developers Should Not Write Programs That Call 'sun' Packages。
您的计划有何功能?它只是尝试读取或写入JPG图像吗?使用ImageIO
API非常简单。请参阅本教程:Writing/Saving an Image。
添加 - 已在{7}中提及的Java 7中删除了包com.sun.image.codec.jpeg
。
概要:非标准
com.sun.image.codec.jpeg
套餐已停用描述:JDK 1.2(1998年12月)中添加了
com.sun.image.codec.jpeg
包作为控制JPEG格式图像文件加载和保存的非标准方法。该软件包从未成为平台规范的一部分,已从Java SE 7版本中删除。 Java Image I / O API作为标准API添加到JDK 1.4版本中,无需com.sun.image.codec.jpeg
包。
答案 2 :(得分:2)
通常,请不要使用“ sun。”或“ com.sun。”程序包中的类,因为这些程序包被视为实现细节,并且不属于Java API。
由于没有向后兼容性保证,因此在迁移到Java的新版本时可能会引起问题。同样,当转移到其他Java供应商(例如OpenJDK)时,它们也会引起问题。
此类类几乎总是由应该使用的Java API类包装。
请参阅:https://sonarcloud.io/organizations/default/rules?languages=java&open=squid%3AS1191&q=sun
答案 3 :(得分:1)
您使用的是哪种JDK?我认为这个包不是必需的,只能在Sun的JDK中使用。 This discussion解释道。
如果您确实想要使用它,可以下载jar文件并将其单独包含在路径文件中。
根据docs:
请注意,com.sun.image.codec.jpeg包中的类不是核心Java API的一部分。它们是Sun的JDK和JRE发行版的一部分。虽然其他被许可方可能会选择分发这些类,但开发人员不能依赖于非Sun实现中的可用性。我们希望最终在核心API或标准扩展中提供等效功能。
答案 4 :(得分:1)
看起来你正在使用已被替换的东西。也许你在使用Java 7?
Here似乎描述了这一点,以及在哪里找到它是正确的替代品。
答案 5 :(得分:0)
为此问题在pom.xml中添加以下配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<bootclasspath>
${java.home}/lib/rt.jar${path.separator}${java.home}/lib/javaws.jar${path.separator}${java.home}/lib/jce.jar
</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
对我有用。