Java AudioStream-IOException:无法从输入流创建音频流

Java AudioStream-IOException:无法从输入流创建音频流,java,audio,actionlistener,deprecated,Java,Audio,Actionlistener,Deprecated,所以我一直在尝试使用AudioStream类播放声音文件。它在第一次尝试时工作正常,但之后就不再工作了。相反,它给了我一个IOException错误 这是我使用的代码。请注意,此代码是在一个线程中运行的,该线程由ActionListener以JButton的形式执行 public void run() { try { failAudioStream = new AudioStream(failInputStream); successAudioStrea

所以我一直在尝试使用AudioStream类播放声音文件。它在第一次尝试时工作正常,但之后就不再工作了。相反,它给了我一个IOException错误

这是我使用的代码。请注意,此代码是在一个线程中运行的,该线程由ActionListener以JButton的形式执行

public void run() {

    try {
        failAudioStream = new AudioStream(failInputStream);
        successAudioStream = new AudioStream(successInputStream);
        waitingAudioStream = new AudioStream(waitingInputStream);
    } catch(IOException e) {
        e.printStackTrace();
    }
 }
此线程由实现ActionListener的类运行。这是我用于该类的代码

package com.gmail.zacharyvincze.pifiles.listeners;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SendFileListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

        (new SendThread()).start();

    }

}
正如我在开始时所说,音频流在第一次按下按钮时工作,但在第二次按下按钮时,它会给我以下输出错误

java.io.IOException: could not create audio stream from input stream
    at sun.audio.AudioStream.<init>(AudioStream.java:80)
    at com.gmail.zacharyvincze.pifiles.listeners.SendThread.run(SendThread.java:36)
java.io.IOException: could not create audio stream from input stream
    at sun.audio.AudioStream.<init>(AudioStream.java:80)
    at com.gmail.zacharyvincze.pifiles.listeners.SendThread.run(SendThread.java:36)
java.io.IOException: could not create audio stream from input stream
    at sun.audio.AudioStream.<init>(AudioStream.java:80)
    at com.gmail.zacharyvincze.pifiles.listeners.SendThread.run(SendThread.java:36)

你在这些文件完成之前就开始过滤-显示所有代码-AudioStream没有被弃用它工作我能想到的唯一可能导致问题的代码是
AudioPlayer.player.start(failAudioStream)
。另外,您确定它没有被弃用吗?每次我运行它时,它都会给我这个警告<代码>2016-05-02 22:08:52.656 java[22281:3708317]22:08:52.656警告:140:此应用程序或其使用的库正在使用不推荐的Carbon Component Manager托管音频单元。对此的支持将在将来的版本中删除。此外,这使得主机与版本3音频单元不兼容。请转到AudioComponent.h中的API。@gpasch告诉我您是否需要完整的代码。你是想说音频播放器还没来得及完成就重新启动了吗?@gpasch如果你需要看的话,我已经在问题中添加了完整的代码。碳组件经理:我不知道那是什么,它可能被弃用了主javax.sound不是-哦,好的,你正在使用wierd软件包-我是说这个javax.sound.sampled.AudioInputStream-我看不出来你最好使用主javax.sound包-我猜它们完成了,但从未关闭过,因此它们无法重新启动-你需要关闭流-在任何情况下切换到javax.sound-或者等待其他人-你在完成之前正在提取这些文件-显示所有代码-AudioStream没有弃用它工作我能想到的唯一可能导致问题的代码是
AudioPlayer.player.start(failAudioStream)
。另外,您确定它没有被弃用吗?每次我运行它时,它都会给我这个警告<代码>2016-05-02 22:08:52.656 java[22281:3708317]22:08:52.656警告:140:此应用程序或其使用的库正在使用不推荐的Carbon Component Manager托管音频单元。对此的支持将在将来的版本中删除。此外,这使得主机与版本3音频单元不兼容。请转到AudioComponent.h中的API。@gpasch告诉我您是否需要完整的代码。你是想说音频播放器还没来得及完成就重新启动了吗?@gpasch如果你需要看的话,我已经在问题中添加了完整的代码。碳组件经理:我不知道那是什么,它可能被弃用了主javax.sound不是-哦,好的,你正在使用wierd软件包-我是说这个javax.sound.sampled.AudioInputStream-我看不出来,你最好使用主javax.sound包-我猜它们完成了,但从未关闭,因此它们无法重新启动-你需要关闭流-在任何情况下切换到javax.sound-或等待其他人
package com.gmail.zacharyvincze.pifiles.listeners;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.ImageIcon;

import com.gmail.zacharyvincze.pifiles.PiFiles;
import com.gmail.zacharyvincze.pifiles.windows.Display;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

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

public class SendThread extends Thread {

    //Streams for sounds
    private static InputStream waitingInputStream = SendThread.class.getResourceAsStream("/com/gmail/zacharyvincze/pifiles/sounds/waiting.wav");
    private static AudioStream waitingAudioStream;

    private static InputStream successInputStream = SendThread.class.getResourceAsStream("/com/gmail/zacharyvincze/pifiles/sounds/success.wav");
    private static AudioStream successAudioStream;

    private static InputStream failInputStream = SendThread.class.getResourceAsStream("/com/gmail/zacharyvincze/pifiles/sounds/fail.wav");
    private static AudioStream failAudioStream;

    //Void for starting Thread
    public void run() {

        //Play waiting music
        try {
            failAudioStream = new AudioStream(failInputStream);
            successAudioStream = new AudioStream(successInputStream);
            waitingAudioStream = new AudioStream(waitingInputStream);
        } catch(IOException e) {
            e.printStackTrace();
        }

        AudioPlayer.player.start(waitingAudioStream);

        //Set loading icon
        Display.loading.setIcon(new ImageIcon(Display.class.getResource("/com/gmail/zacharyvincze/pifiles/images/wifi-load.gif")));
        Display.loading.setVisible(true);

        //Setting variables used for file transfer setup
        String SFTPHOST = Display.hostname.getText();
        int SFTPPORT = 22;
        String SFTPUSER = Display.username.getText();
        char[] pass = Display.password.getPassword();
        String SFTPPASS = new String(pass);
        String SFTPWORKINGDIR = "Documents/";

        Session session = null;
        Channel channel = null;
        ChannelSftp channelSftp = null;

        //Start the transfer
        try {
            try {
                File f = new File(ChooseFileListener.chooser.getSelectedFile().toString());
                channelSftp.put(new FileInputStream(f), f.getName());
                channelSftp.get(f.getName(), SFTPWORKINGDIR, new SystemOutProgressMonitor());
            } catch(NullPointerException e) {
                Display.loading.setIcon(new ImageIcon(Display.class.getResource("/com/gmail/zacharyvincze/pifiles/images/no-file.png")));
                AudioPlayer.player.start(failAudioStream);
                return;
            }

            JSch jsch = new JSch();
            session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
            session.setPassword(SFTPPASS);
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();
            channel = session.openChannel("sftp");
            channel.connect();
            channelSftp = (ChannelSftp)channel;
            channelSftp.cd(SFTPWORKINGDIR);

            //Stop the waiting stream
            AudioPlayer.player.stop(waitingAudioStream);

            //Play the success stream
            AudioPlayer.player.start(successAudioStream);

            //Set the icon to the success icon
            Display.loading.setIcon(new ImageIcon(Display.class.getResource("/com/gmail/zacharyvincze/pifiles/images/success.png")));

        } catch(Exception ex) {

            //Stop the waiting stream
            AudioPlayer.player.stop(waitingAudioStream);

            //Play the fail stream
            AudioPlayer.player.start(failAudioStream);

            Display.loading.setIcon(new ImageIcon(Display.class.getResource("/com/gmail/zacharyvincze/pifiles/images/error.png")));

            ex.printStackTrace();
        }
    }

}