Java 在声音结束后执行操作

Java 在声音结束后执行操作,java,swing,audio,action,javasound,Java,Swing,Audio,Action,Javasound,我现在可以使用JavaSound和来自的代码在我的JavaSwing应用程序中播放声音。我现在想做的是: 播放声音;声音结束后,我想播放另一个声音,即动作。 因此,基本上,分步骤: 播放声音。我知道这个声音需要-4秒。 声音结束后。 执行动作,例如播放另一个声音。 我尝试了几个选项,延迟、线程,但都没有找到答案。在您的示例中,一个数据线对象被用来播放声音。DataLine对象有一个方法调用addLineListener,它接受一个实现LineListener接口的对象,并公开可以用于执行操作或播

我现在可以使用JavaSound和来自的代码在我的JavaSwing应用程序中播放声音。我现在想做的是:

播放声音;声音结束后,我想播放另一个声音,即动作。 因此,基本上,分步骤:

播放声音。我知道这个声音需要-4秒。 声音结束后。 执行动作,例如播放另一个声音。 我尝试了几个选项,延迟、线程,但都没有找到答案。

在您的示例中,一个数据线对象被用来播放声音。DataLine对象有一个方法调用addLineListener,它接受一个实现LineListener接口的对象,并公开可以用于执行操作或播放其他声音的事件,如启动和停止

您需要做的是:

在类中实现LineListener接口 通过使用以下命令调用addLineListener方法订阅更新事件 论点 实现LineListener接口的更新方法 在update方法中测试事件,并提供所需的操作 这演示了如何在update方法中处理LineListener事件。

在您的示例中,数据线对象用于播放声音。DataLine对象有一个方法调用addLineListener,它接受一个实现LineListener接口的对象,并公开可以用于执行操作或播放其他声音的事件,如启动和停止

您需要做的是:

在类中实现LineListener接口 通过使用以下命令调用addLineListener方法订阅更新事件 论点 实现LineListener接口的更新方法 在update方法中测试事件,并提供所需的操作
这演示了如何在update方法中处理LineListener事件。

作为Abbas良好解决方案的替代方案,我建议定期检查用于播放文件的线程是否处于活动状态

查看您提供的教程,主程序将创建thread类的新实例,并使用start方法启动线程。因此,您可以检查线程是否仍处于活动状态。当线断了,你可以做你想做的事。例如:

    AePlayWave apw = new AePlayWave("test.wav");
    apw.start();

    try{
        boolean alive = apw.isAlive();
        while(alive){
            //check periodically if the thread is alive         
            alive = apw.isAlive();
            Thread.currentThread().sleep(500);

            }

    }

    catch(InterruptedException e){
        System.out.println("Interrupted");
        e.printStackTrace();
    }

//do other action..

当apw线程为死线程时,则布尔活动线程为假,并且程序退出while循环,您可以执行所需的操作。

作为Abbas良好解决方案的替代方案,我建议定期检查用于播放文件的线程是否活动

查看您提供的教程,主程序将创建thread类的新实例,并使用start方法启动线程。因此,您可以检查线程是否仍处于活动状态。当线断了,你可以做你想做的事。例如:

    AePlayWave apw = new AePlayWave("test.wav");
    apw.start();

    try{
        boolean alive = apw.isAlive();
        while(alive){
            //check periodically if the thread is alive         
            alive = apw.isAlive();
            Thread.currentThread().sleep(500);

            }

    }

    catch(InterruptedException e){
        System.out.println("Interrupted");
        e.printStackTrace();
    }

//do other action..

当apw线程死机时,boolean alive为false,程序退出while循环,您可以执行您想要的操作。

在Java中播放声音片段有几种方法。您使用了哪种方法?这一种:在Java中播放声音片段有几种方法。你用了哪一个?这个:很好。我不知道电话听筒的事但是,如果我们想要一个替代的解决方案,主程序可能会等待OP提供的教程中的线程,直到它处于活动状态,然后,当线程死亡时,OP可以执行另一个操作。我不知道OP在线程方面到底做了些什么,但你不认为这是一种替代方法吗?这是另一种有效的方法,但是,我发现更新方法非常方便,并且实现了LineListener,对当前结构没有干扰。非常好。我不知道电话听筒的事但是,如果我们想要一个替代的解决方案,主程序可能会等待OP提供的教程中的线程,直到它处于活动状态,然后,当线程死亡时,OP可以执行另一个操作。我不知道OP在线程方面到底做了些什么,但你不认为这是一种替代方法吗?这是另一种有效的方法。然而,我发现更新方法非常方便,实现LineListener对当前结构没有干扰。