class 测试(在未命名模块 @0x33f88ab 中)无法访问 class com.sun.media.sound.FFT(在模块 java.desktop 中)

class Test (in unnamed module @0x33f88ab) cannot access class com.sun.media.sound.FFT (in module java.desktop)

我想用 musicg 分析音频指纹。
但是我在 musicg 库中遇到以下错误。

IllegalAccessError: class Test
(in unnamed module @0x33f88ab) cannot access class com.sun.media.sound.FFT
(in module java.desktop)
because module java.desktop does not export com.sun.media.sound to unnamed module @0x33f88ab

我该怎么办?

环境

我的代码

fun main(args: Array<String>) {
    FFT(10, 20)
}

FFT(10, 20)

中出现异常

com.sun 及其 sub-packages 不属于 public Java API。它们实现了一些标准的 Java APIs,但你不应该直接引用它们。 (它们可能会更改 and/or 在 JVM 版本之间被重命名或删除,并且 non-Sun/Oracle JVM 可能根本不会有它们。)

在大多数情况下,您应该访问 public API 类(例如 javax.sound)。 (那些可以根据需要在内部使用 sun.*/com.sun.*/等。类,但这只是一个实现细节。)

在 Java 的早期版本中,没有什么可以 阻止 人们使用那些内部实现 类,因此一些开发人员养成了坏习惯。但是Java9加了一个module system,限制了对它们的访问。您看到的错误消息就是由此产生的结果。

详细信息在 JEP 260. The intent was that there would be public APIs for all of the critical APIs that were being restricted. However, according to this Oracle forum page 中,工作尚未完成,因此有一些内部 API 还没有 public 等效项存在。

FFT 看起来像是被忽视的那些 类 之一。恐怕我看不到它的直接替代品。有可以使用的 third-party 库吗? This question 给出了一些选项。