Sun JDK和Open JDK的区别

3
我遇到了以下错误:

Exception in thread "Thread-1" java.lang.IncompatibleClassChangeError: Found class com.sun.image.codec.jpeg.JPEGImageEncoder, but interface was expected

我使用的是Sun JDK构建我的JAR文件,但在OpenJDK上运行。我现在有些困惑。
是否有简单的解决方法?我需要在OpenJDK上编译和运行代码吗?

你的代码是否直接访问JPEGImageEncoder?这不是一个公共API。(如果是的话,建议升级到最新的Oracle和OpenJDK版本,并删除对“私有”类的依赖。)如果你真的在使用Sun JDK,那么可能是时候更新一下旧版本了。 - Tom Hawtin - tackline
我没有直接访问该函数,这都是在第三方软件Jasper Reports中完成的。 - reza
2个回答

2

com.sun.image.codec.jpeg.JPEGImageEncoder 这个包名字中的“sun”表示这是Sun公司特有的一个包,因此其他JDK\JRE很可能不会提供这个类(实际上非常不可能)。如果你直接使用它,那么你的应用程序就只能在Sun的JVM上运行。


2
看起来,Jasper Reports正在钻取并使用不应使用的内部类/方法。这显然在所有平台上都无法正常工作...这并不奇怪,因为Sun / Oracle明确指出这样做可能会破坏程序。

你应该怎么办呢?
  • 检查支持的平台数据表。我注意到它列出了OpenJDK 6,但没有列出OpenJDK 7。也许你应该坚持使用JasperSoft支持的平台。

  • 我发现这个页面似乎谈论了这个问题...或者是相似的问题...并提供了解决方法。


看起来非常有前途,我会试一试,谢谢。我会回报的。 - reza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接