我的线程的run()方法在try-catch块中有while循环,如下所示:
try{
while(true){
// some code here
if(condition)
break;
else
//more code here
}
}catch(Exception e){..}
我认为代码没有进入无限循环,因为:
我的if条件保证在一些迭代后导致循环中断。
由于catch块在while循环之外,while循环中的任何异常都会导致循环中断。
一旦我启动线程,应用程序崩溃。
我已经完成了这个post,但上面的代码仍然不清楚是什么错误。
这是我的完整运行方法:
private static final int AUDIO_SOURCE=MediaRecorder.AudioSource.MIC;
private static final int SAMPLE_RATE_IN_HZ=44100;
private static final int CHANNEL_CONFIG=AudioFormat.CHANNEL_IN_MONO;
private static final int AUDIO_FORMAT=AudioFormat.ENCODING_PCM_16BIT;
public void run() {
//writing to AudioTrack object using 512kB buffer
int buffSize=512*1024; //512kb = 512*1024 B
byte[] buff=new byte[buffSize];
int fileSize=(int)outputFile.length(); //outputFile=.PCM file
int bytesRead=0,readCount=0;
FileInputStream fin=null;
try {
fin = new FileInputStream(outputFile);
}catch(Exception e){}
int TrackBufferSizeInBytes=android.media.AudioTrack.getMinBufferSize(SAMPLE_RATE_IN_HZ, CHANNEL_CONFIG,AUDIO_FORMAT);
//create AudioTrack object
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC,SAMPLE_RATE_IN_HZ,CHANNEL_CONFIG,
AUDIO_FORMAT, TrackBufferSizeInBytes, AudioTrack.MODE_STREAM);
at.play();
try{
while(bytesRead<fileSize){
readCount=fin.read(buff,0,buffSize);
if(readCount==(-1)) // if EOF is reached
break;
else{
at.write(buff, 0, readCount); //write read bytes to Track
bytesRead+=readCount;
}
}
at.stop();
at.release();
at=null;
fin.close();
}catch(Exception e){}
}
请帮帮我。谢谢!
答案 0 :(得分:0)
您应该在catch块中使用printStackTrace()方法,它将显示在哪行代码上生成的Exception!
尝试在catch块中使用它:
e.printStackTrace();
或者你可以插入断点和&amp;调试代码以查看其行为
或者您也可以使用Log&amp;查看Logcat中变量的值