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