首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDK9问题:运行简单java代码失败

JDK9问题:运行简单java代码失败
EN

Stack Overflow用户
提问于 2017-10-15 00:46:02
回答 2查看 921关注 0票数 2

我正在运行DMelt (http://jwork.org/dmelt),我注意到在使用JDK9时,简单的Java代码会失败。下面是一个Jython示例,错误发布在下面。我使用Ubuntu来运行DMelt。

代码语言:javascript
复制
from jhplot  import *
c1 = HPlot("Canvas")
c1.visible(1)
f1=F1D("x^2")
c1.draw(f1)
c1.export("image.pdf")

或者,用Java重写:

代码语言:javascript
复制
import jhplot.*;

class MyFunction  
{
public static void main(String[] args) { 
HPlot c1 = new HPlot("Canvas");
c1.visible(true);
F1D f1 = new F1D("x^2");
c1.draw(f1);
c1.export("image.pdf");
 }    
} 

下面是错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "a.py", line 7, in <module>
    c1.export("image.pdf")
    at java.desktop/javax.imageio.spi.ServiceRegistry.checkClassAllowed(ServiceRegistry.java:745)
    at java.desktop/javax.imageio.spi.ServiceRegistry.<init>(ServiceRegistry.java:140)
    at org.freehep.graphicsbase.util.export.ExportFileTypeRegistry.<init>(ExportFileTypeRegistry.java:33)
    at org.freehep.graphicsbase.util.export.ExportFileTypeRegistry.getDefaultInstance(ExportFileTypeRegistry.java:44)
    at org.freehep.graphicsbase.util.export.ExportFileType.getExportFileTypes(ExportFileType.java:180)
    at org.freehep.graphicsbase.util.export.ExportFileType.getExportFileTypes(ExportFileType.java:172)
    at jhplot.io.images.ExportVGraphics.export(ExportVGraphics.java:101)
    at jhplot.gui.GHPanel.export(GHPanel.java:501)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
java.lang.IllegalArgumentException: java.lang.IllegalArgumentException: org.freehep.graphicsbase.util.export.ExportFileType is not an ImageIO SPI class

相同的代码在所有Java版本1.5-1.8上都能正常工作。请注意,此错误与Jython无关。这是一个与JDK9: An illegal reflective access operation has occurred. org.python.core.PySystemState无关的新JDK9问题

EN

回答 2

Stack Overflow用户

发布于 2017-10-15 01:48:11

在JDK9中这方面有一个不兼容的变化。从JDK 9 release notes

从JavaSE1.4开始,javax.imageio.spi.ServiceRegistry提供了大致相当于JavaSE1.6 java.util.ServiceLoader的功能。此映像i/o功能现在仅限于支持定义为javax.imageio一部分的SPI。将其用于其他目的的应用程序需要重新编码才能使用ServiceLoader。

org.freehep.graphicsbase似乎就是FreeHEP项目。有人需要检查他们的问题跟踪器,看看他们是否已经解决了这个问题。也许他们可以简单地将代码更改为使用java.util.ServiceLoader,而不是有些晦涩的javax.imageio.spi.ServiceRegistry

票数 3
EN

Stack Overflow用户

发布于 2017-10-23 05:25:21

实际上,甲骨文已经引入了这一突如其来的特性,将javax.imageio.spi.ServiceRegistry限制为某些图像类。您可以在使用VectorGraphics的DMelt framework和其他开放源码中轻松修复此问题:

1)从没有限制的JDK8 http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/9d617cfd6717/src/share/classes/javax/imageio/spi/获取此包的源代码

2)重命名包并将其添加到您的工程中。在此阶段,您可以完全删除javax.imageio.spi.ServiceRegistry。

这个简单的解决方案效果很好。但是要确保你的项目是基于GNU的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46746962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档