gpt4 book ai didi

java - 调用音频播放功能时,Java事件被杀死

转载 作者:行者123 更新时间:2023-12-03 02:22:24 25 4
gpt4 key购买 nike

我面临一个奇怪的编程问题。这让我筋疲力尽,但找不到解决方案!

我的程序主要取决于从外部硬件触发的事件(Java Listener),该事件用于从该硬件接收音频消息。在eventHandler内,我执行以下操作

  • 将收到的消息传递给另一个类的静态方法“decode”,该类返回数据
  • 然后打开FileOutputStream,将这些数据“音频”写入文件,然后关闭FileOutputStream。
  • 我从另一个类调用静态方法“play”来播放音频文件。

  • 问题是:每当首次调用“Play”方法时,它都会正确执行,但会导致事件停止引发并且程序终止,但没有异常(exception)。当我注释掉播放方法时,一切都会变好!

    您对导致程序终止的方法有一些想法吗?
     public void messageReceived(int to,Message message)
    {

    speexAudioMsg msg = (speexAudioMsg)message;
    try{

    byte[] output = jspeexDecoder.decode(msg.get_frame());

    os = new FileOutputStream(file);
    os.write(output);
    os.close();
    Player.play();
    }
    catch (IOException ex) {ex.printStackTrace();}

    }

    最佳答案

    您可能正在使用事件线程来播放音乐。尝试在新线程中调用Player.play()。

    new Thread(new Runnable(){public void run(){Player.play()}})。start();

    这是一个例子:


    static String url = "http://www.stackoverload.com";

    public static void threadTest() {
    new Thread(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
    try {
    URL url2 = new URL(url);
    url2.openStream();
    } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    }).run();

    关于java - 调用音频播放功能时,Java事件被杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452100/

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