如何在Java中停止音频?

如何在Java中停止音频?,java,audio,Java,Audio,我想在调用我的getoutput方法时播放音乐,并在调用完成时停止音乐。我能做前者,但不能做后者。调用完getoutput方法后,如何停止音乐 import java.io.InputStream; import javax.sound.sampled.AudioSystem; import sun.audio.AudioPlayer; import sun.audio.AudioStream; public class Student { public void music()

我想在调用我的
getoutput
方法时播放音乐,并在调用完成时停止音乐。我能做前者,但不能做后者。调用完
getoutput
方法后,如何停止音乐

import java.io.InputStream;
import javax.sound.sampled.AudioSystem;

import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

public class Student {

    public void music() {

        try {
            // open the sound file as a Java input stream
            String gongFile = "C:\\Users\\wei liang\\Documents\\Programming fundamentals\\T7-Arrays\\Assignment\\TT.wav";
            InputStream in = new FileInputStream(gongFile);

            // create an audiostream from the inputstream
            AudioStream audioStream = new AudioStream(in);

            // play the audio clip with the audioplayer class
            AudioPlayer.player.start(audioStream);

        } catch (Exception ex) {
            System.out.println("Error! Can't find file.");
            ex.printStackTrace();
        }
    }
}
这是我的主要方法,它调用music方法和另一个学生课堂上没有显示的方法

public class StudentUser {

    //Main method
    public static void main(String args[]) {

        //creating a new Student object
        Student stud = new Student();

        //Calling the music method
        stud.music();

        //Calling the getoutput method
        stud.getoutput();

    }
}

我建议使用线程,线程将一直保持活动状态,直到音乐文件被播放,并将自动结束

因为您没有提供
getoutput
方法,所以只需调用
music
方法,它就会播放音乐并结束

您的
学生
课程如下:

import javax.sound.sampled.*;
import java.io.File;

class Student {

    public synchronized void music(final String fileName, final SoundOptions mode) {
        Thread music = new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    AudioInputStream inputStream = AudioSystem.getAudioInputStream(
                            new File(fileName));

                    final Clip audioLineClip = (Clip) AudioSystem.getLine(
                            new Line.Info(Clip.class));
                    audioLineClip.open(inputStream);
                    audioLineClip.setFramePosition(0);

                    audioLineClip.addLineListener(new LineListener() {
                        @Override
                        public void update(LineEvent event) {
                            LineEvent.Type type = event.getType();
                            if (type == LineEvent.Type.OPEN) {
                            } else if (type == LineEvent.Type.CLOSE) {
                                System.exit(0);
                            } else if (type == LineEvent.Type.START) {
                            } else if (type == LineEvent.Type.STOP) {
                                audioLineClip.close();
                            }
                        }
                    });

                    switch (mode) {
                        case Stop:
                            audioLineClip.stop();
                            break;
                        case Play:
                            audioLineClip.start();
                            break;
                        case Loop:
                            audioLineClip.loop(Clip.LOOP_CONTINUOUSLY);
                            break;
                    }
                } catch (Exception e) {
                    System.err.println(e.getMessage());
                }
            }
        });

        if (mode != SoundOptions.Stop) {
            music.start();

            synchronized (music) {
                while (true) {
                    try {
                        music.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }

        } else {
            music.interrupt();
        }
    }


}

enum SoundOptions {
    Play, Loop, Stop
}
StudentUser
class:

public class StudentUser {

    private static String gongFile = "C:\\Users\\wei liang\\Documents\\Programming fundamentals\\T7-Arrays\\Assignment\\TT.wav";

    //Main method
    public static void main(String args[]) {

        //Creating a new Student object
        Student stud = new Student();

        //Calling the music method and it is stops when music ends
        stud.music(gongFile, SoundOptions.Play);
    }
}

不要使用
sun.*
软件包,它们没有文档记录,随时可能消失。你应该使用
音频输入流
剪辑
来存储/播放你的音频。如果你需要答案,请告诉我,我给你写信了,你没有回复。