为什么我不能从 com.sun.media.sound 导入?
Why can't I import from com.sun.media.sound?
我想使用 Java JDK 中包含的音频合成器和 midi classes。 MidiSystem.getSynthesizer() returns 合成器。调试显示实际的 class 是 SoftSynthesizer。所以这个测试通过了:
@Test
void defaultSynth() throws MidiUnavailableException {
Synthesizer synthesizer = MidiSystem.getSynthesizer();
assertEquals("SoftSynthesizer", synthesizer.getClass().getSimpleName());
}
但我无法使用 class 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。
大多数内部 API(因为)JDK9 无法被 JDK 之外的代码访问
请参阅 JEP 260:封装大多数内部 API 了解详细信息和潜在的解决方法。
我想使用 Java JDK 中包含的音频合成器和 midi classes。 MidiSystem.getSynthesizer() returns 合成器。调试显示实际的 class 是 SoftSynthesizer。所以这个测试通过了:
@Test
void defaultSynth() throws MidiUnavailableException {
Synthesizer synthesizer = MidiSystem.getSynthesizer();
assertEquals("SoftSynthesizer", synthesizer.getClass().getSimpleName());
}
但我无法使用 class 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。
大多数内部 API(因为)JDK9 无法被 JDK 之外的代码访问 请参阅 JEP 260:封装大多数内部 API 了解详细信息和潜在的解决方法。