我想使用musig来分析音频指纹
但我在音乐库中出现以下错误。
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
我该怎么办?
环境
- Kotlin
- JDK 17(可降级(
- 音乐g 1.4.2.2
我的代码
fun main(args: Array<String>) {
FFT(10, 20)
}
在FFT(10, 20)
中获得异常
com.sun
及其子包不是公共Java API的一部分。它们实现了一些标准的Java API,但您不应该直接引用它们。(它们可能会在JVM发布之间更改和/或重命名或删除,而非Sun/Oracle JVM可能根本没有它们。(
在大多数情况下,您应该访问公共API类(例如javax.sound
(。(根据需要,这些可以在内部使用sun.*
/com.sun.*
/等类,但这只是一个实现细节。(
在Java的早期版本中,没有什么可以阻止人们使用这些内部实现类,因此一些开发人员养成了坏习惯。但Java9添加了一个模块系统,限制了对它们的访问。您看到的错误消息就是这样的结果。
详情见JEP 260。其目的是为所有受到限制的关键API提供公共API。然而,根据这个Oracle论坛页面,这项工作还没有完成,因此有一些内部API还没有公开的等效API。
FFT
看起来像是那些被忽视的类之一。恐怕我找不到直接的替代品。有可以使用的第三方库吗?这个问题提供了一些选择。