【问题标题】:java.lang.IllegalArgumentException:No Line Interface matching Clip supporting formatjava.lang.IllegalArgumentException:No Line Interface matching Clip 支持格式
【发布时间】:2017-12-04 02:20:35
【问题描述】:

我正在编写一个带有音乐和音效的视频游戏。在我测试过的 3/4 机器上,一切运行顺利。在另一台机器上,加载任何类型的声音文件都会产生这个异常: 我只对音乐曲目进行了堆栈跟踪,但游戏使用的所有声音都会出现此错误(正如您在终端中看到的“嗡嗡声”音效)。 NullPointerException 只是因为没有正确加载声音而被抛出。这是导致IllegalArgumentException 的代码:

    try{
        c=AudioSystem.getClip();
        c.open(AudioSystem.getAudioInputStream(new File("Resources/Songs/"+name+".wav")));
    }catch(Exception e){
        System.out.println("Song name not recognized: "+name);
        e.printStackTrace();
    }

忽略“歌曲名称无法识别”位,这通常由FileNotFoundException 调用,如果我在其他地方打错字,这很有帮助。 以下是我所知道的: 1. 这个故障与声音的长度无关,因为它对于 5 分钟的歌曲和 1 秒的音效都失败了。 2.此故障可能是由于AudioSystem.getClip()在某些规格的系统上失败,系统无法打开剪辑造成的。 (https://bugs.openjdk.java.net/browse/JDK-7026275)

无论系统规格如何,如何防止这种情况发生?或者这完全是由其他原因引起的? 发生这种情况的机器是我朋友的,因此我无法立即访问她的计算机。

【问题讨论】:

  • 包含错误消息作为文本
  • 通常我会,但正如我所说,这发生在朋友的电脑上,她给我发了一张截图
  • 检查this answer。它可能会有所帮助。
  • 空指针异常不是问题所在。这只是音频文件未缓冲到代码中的结果。问题出在我发布的代码中。它给出了一个空指针,因为稍后游戏会调用要播放的音乐,并且通常可以预期 Clip 会被加载,但事实并非如此。
  • 这里出了点问题。您不应该从paintComponent 方法调用gameTick。您无法控制调用paintComponent 的频率——底层系统可能会为单个曝光事件多次调用它,或者可能会调用它以响应鼠标在组件上的移动。

标签: java audio


【解决方案1】:

我通过让此人更新他们的声音驱动程序解决了这个问题。

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2019-08-18
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多