import com.sun.image.codec.jpeg。*

时间:2009-12-15 11:00:59

标签: java image-processing

我有一个Java程序 当我编译它时,我得到以下错误

[javac] ...\MyClass.java:33: package com.sun.image.codec.jpeg does not exist
[javac] import com.sun.image.codec.jpeg.*;
[javac] ^

我该怎么办?

现在不推荐使用com.sun软件包,编写映像文件的正确方法是什么。

6 个答案:

答案 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>

对我有用。