gpt4 book ai didi

Java Sound : devices found when run in IntelliJ, 但不在 SBT 中

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:05 25 4
gpt4 key购买 nike

我正在尝试在 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 中执行 run 时,我得到了 javax.sound.midi.MidiUnavailableException 因为 infos.length 返回 0。也就是说,当我在 IntelliJ 中运行该应用程序时,发现了两个设备并且音符播放得很好。

SBT 需要知道什么才能运行?有什么东西需要添加到类路径吗?我注意到 IntelliJ 将一大堆 jar 附加到执行命令(但是,删除那些来自 jdk/jre/lib/的 jar 没有效果,而其他的与 scala 相关或 IntelliJ 相关)。

最佳答案

SBT 在进程内运行您的应用程序,使用一些类加载器魔法,这可能会阻止 MidiSystem 找到(使用 SPI)声音组件。

您可以尝试创建一个新的 JVM 来运行您的应用程序:fork in run := true。参见 Forking在文档中。

注意:

  • 默认情况下,它不会将输入重定向到应用程序。您可以添加:

    connectInput in run := true
  • fork 的 JVM 可以被任何外部工具毫无问题地杀死(使用 kill 或任何类型的任务管理器)

关于Java Sound : devices found when run in IntelliJ, 但不在 SBT 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18676712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com