我是新來下載一個文件與Java和抱歉,如果它是一個愚蠢的問題,但我已經搜索了2天,並無法獲得解決方案。我在applet中使用JPanel,我想在progressBar中顯示下載進度(可能下載的不是正確的字,它更可能是初始化)如何獲取與audioinputstream java下載文件的進度
我想要的是顯示wav的下載過程文件從URL.I不意味着顯示讀取過程(我會讓用戶知道文件正在處理以後。)我只是想獲得進展ais = AudioSystem.getAudioInputStream(url);
我試圖使用ProgressMonitorInputStream但這對我不起作用,因爲我想將進度條添加到我的JFrame中。我尋找swingWorker但它的使用並沒有給我我想要的進展。
這裏是我的閱讀功能。我也根據我的需要更改wav格式。
public void readFile() {
byte[] data = null;
AudioInputStream ais = null;
try {
URL url = new URL("http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/WAVE/Samples/AFsp/M1F1-Alaw-AFsp.wav");
ais = AudioSystem.getAudioInputStream(url);
AudioFormat format = ais.getFormat();
numberOfChannels = format.getChannels();
AudioFormat TargetFormat = new AudioFormat(format.getSampleRate(), 16, numberOfChannels, true, false);
AudioInputStream desiredFormatStream = AudioSystem.getAudioInputStream(TargetFormat,ais);
data = new byte[4];
int totalSampleCount = ais.available()/(format.getSampleSizeInBits()/8);
audio = new double[totalSampleCount];
for (int i = 0; i < totalSampleCount-1; i=i+2) {
desiredFormatStream.read(data);
if(!TargetFormat.isBigEndian()){
audio[i] = ((short) (((data[1] & 0xFF) << 8) + (data[0] & 0xFF)))/((double) MAX_16_BIT);
audio[i+1] = ((short) (((data[3] & 0xFF) << 8) + (data[2] & 0xFF)))/((double) MAX_16_BIT);
}
else {
audio[i] = ((short) (((data[0] & 0xFF) << 8) + (data[1] & 0xFF)))/((double) MAX_16_BIT);
audio[i+1] = ((short) (((data[2] & 0xFF) << 8) + (data[3] & 0xFF)))/((double) MAX_16_BIT);
}
}
StdAudio.open(TargetFormat);
} catch (Exception e) {
System.out.println(e.getMessage());
throw new RuntimeException("Could not read " + filename);
}
}
有什麼辦法可以達到這個目的嗎?
在此先感謝。