标签:javasound java scala intellij-idea
我正在尝试在Scala SBT管理的项目中使用Java Sound API.
这是一个可播放音符的玩具应用.
import javax.sound.midi._
object MyMain extends App {
val infos = MidiSystem.getMidiDeviceInfo()
println( "[DEBUG] midi devices found: " + infos.length )
val myMsg = new ShortMessage;
// Start playing the note Middle C (60),
// moderately loud (velocity = 93).
myMsg.setMessage(ShortMessage.NOTE_ON, 0, 60, 93);
val timeStamp = -1;
val rcvr : Receiver = MidiSystem.getReceiver();
rcvr.send(myMsg, timeStamp);
readChar() // give time to play note
}
当我在SBT中执行运行时,由于infos.length返回0,所以我得到了javax.sound.midi.MidiUnavailableException.也就是说,当我在IntelliJ中运行该应用程序时,发现了两个设备,并且笔记运行得很好.
SBT要使其运行需要知道什么?是否有需要添加到类路径的东西?我注意到IntelliJ将一大堆jar附加到执行命令(但是,删除来自jdk / jre / lib /的jar无效,而其他则与scala相关或与IntelliJ相关).
解决方法:
SBT使用一些类加载器魔术来在程序中运行您的应用程序,这可能会阻止MidiSystem查找(使用SPI)声音组件.
您可以尝试派生一个新的JVM来运行您的应用程序:fork in run:= true.请参阅文档中的Forking.
注意:
>默认情况下,它不会将输入重定向到应用程序.您可以添加以下内容:
connectInput in run := true
>分叉的JVM可以被任何外部工具毫无问题地杀死(使用kill或任何类型的任务管理器)
标签:javasound,java,scala,intellij-idea 来源: https://codeday.me/bug/20191012/1898876.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。