【发布时间】:2022-01-09 16:05:54
【问题描述】:
我想使用 Java JDK 中包含的音频合成器和 midi 类。 MidiSystem.getSynthesizer() 返回一个合成器。调试显示实际类是 SoftSynthesizer。所以这个测试通过了:
@Test
void defaultSynth() throws MidiUnavailableException {
Synthesizer synthesizer = MidiSystem.getSynthesizer();
assertEquals("SoftSynthesizer", synthesizer.getClass().getSimpleName());
}
但我无法使用 SoftSynthesizer 类和 AudioSynthesizer 接口(它扩展了 Synthesizer,并实现了 SoftSynthesizer)。
下面,AudioSynthesizer 和 SoftSynthesizer 被注释掉,因为它们不能解析。
void foo() {
// Resolved symbol
Synthesizer s = null;
// Unresolved symbols
//AudioSynthesizer as = null;
//SoftSynthesizer ss = null;
}
一个区别是这些库和接口来自不同的包。从com.sun.media.sound 导入不起作用。
import javax.sound.midi.Synthesizer;
//import com.sun.media.sound.AudioSynthesizer;
//import com.sun.media.sound.SoftSynthesizer;
但是这两个包似乎都包含在 JDK 中,那么这有什么关系(如果有的话)?
在 IntelliJ、MacOS 上使用 Java-11 和 Java-17 (Azul) 进行测试。使用 Maven。
【问题讨论】:
-
我不认为 JDK 包含任何超过 Java 8 的
com.sun包...在synthesizer.getClass()上,完整的包名称是什么? -
@OneCricketeer:全类名是“com.sun.media.sound.SoftSynthesizer”。所以是的,它包含在 JDK 中,只是无法访问。