我想使用Java中包含的音频合成器和midi类。MidiSystem.getSynthesizer()返回一个合成器。调试显示实际的类是SoftSynthesizer。所以这个测试通过了:
@Test
void defaultSynth() throws MidiUnavailableException {
Synthesizer synthesizer = MidiSystem.getSynthesizer();
assertEquals("SoftSynthesizer", synthesizer.getClass().getSimpleName());
}但是我无法使用类SoftSynthesizer和接口AudioSynthesizer (它扩展了合成器,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。
发布于 2022-01-09 16:20:14
大多数内部API(自) JDK 9是JDK外部代码无法访问的,请参阅9月260:封装大多数内部API以获得详细信息和可能的解决方案。
https://stackoverflow.com/questions/70643111
复制相似问题