我想使用一些sun.awt.image.PNGImageDecoder
在我的项目中使用的代码。问题是源代码基于Java 8,而我的项目使用JDK 9+ (11)。所以我得到了这个错误:
包 '
sun.awt.image
' 在模块 'java.desktop
' 中声明,它不会将其导出到未命名的模块。
对于import sun.awt.image.*
,并且:
符号在模块 '
java.desktop
' 中声明,它不导出包 'sun.awt.image
'
用于使用PNGImageDecoder
或ImageDecoder
等。
经过一番努力寻找解决方案,我发现了一些类似的情况,建议添加requires java.desktop;
到module-info.java
文件中(比如这个案例和这个案例)。module-info.java
但是当我意识到这个解决方案只有在你的项目已经有一个文件并且你缺少一个使用过的模块时才有用。
我的项目还没有这个文件(注意第一条错误消息中的“未命名模块”)。据我所知,这意味着所有模块都是自动导入的。因此,添加此文件并添加该行没有任何效果,除了(更改错误消息和)导致我的代码的其他部分出现类似问题(当然,可以通过将所需模块添加到module-info.java
文件来解决)。
确定我在(JDK 11的)文件夹中导入了所有模块jmods
,但问题没有解决:
requires java.base;
requires java.compiler;
requires java.datatransfer;
requires java.desktop;
requires java.instrument;
requires java.logging;
requires java.management;
requires java.management.rmi;
requires java.naming;
requires java.net.http;
requires java.prefs;
requires java.rmi;
requires java.scripting;
requires java.se;
requires java.security.jgss;
requires java.security.sasl;
requires java.smartcardio;
requires java.sql;
requires java.sql.rowset;
requires java.transaction.xa;
requires java.xml.crypto;
requires java.xml;
requires jdk.accessibility;
requires jdk.aot;
requires jdk.attach;
requires jdk.charsets;
requires jdk.compiler;
requires jdk.crypto.cryptoki;
requires jdk.crypto.ec;
requires jdk.crypto.mscapi;
requires jdk.dynalink;
requires jdk.editpad;
requires jdk.hotspot.agent;
requires jdk.httpserver;
requires jdk.internal.ed;
requires jdk.internal.jvmstat;
requires jdk.internal.le;
requires jdk.internal.opt;
requires jdk.internal.vm.ci;
requires jdk.internal.vm.compiler;
requires jdk.internal.vm.compiler.management;
requires jdk.jartool;
requires jdk.javadoc;
requires jdk.jcmd;
requires jdk.jconsole;
requires jdk.jdeps;
requires jdk.jdi;
requires jdk.jdwp.agent;
requires jdk.jfr;
requires jdk.jlink;
requires jdk.jshell;
requires jdk.jsobject;
requires jdk.jstatd;
requires jdk.localedata;
requires jdk.management.agent;
requires jdk.management.jfr;
requires jdk.management;
requires jdk.naming.dns;
requires jdk.naming.rmi;
requires jdk.net;
requires jdk.pack;
requires jdk.rmic;
requires jdk.scripting.nashorn;
requires jdk.scripting.nashorn.shell;
requires jdk.sctp;
requires jdk.security.auth;
requires jdk.security.jgss;
requires jdk.unsupported.desktop;
requires jdk.unsupported;
requires jdk.xml.dom;
requires jdk.zipfs;
我知道这个包(sun.awt.image
)存在于java.desktop
(JDK 11的)模块中,但不知道如何访问它。
我使用 IntelliJ IDEA 作为 IDE。