代码如下:
Processor recorder = null;
DataSink filewriter = null;
CaptureDeviceInfo di=null;
MediaLocator dest = null;
StateHelper sh = null;
int time = (FLAT.TIMESPACE_CALL)*1000;
Vector deviceList = CaptureDeviceManager.getDeviceList(new 
AudioFormat("linear", 44100, 16, 2));     
if(deviceList.size()>0)
{
di = (CaptureDeviceInfo)deviceList.firstElement();
try
{
recorder = Manager.createProcessor(di.getLocator());
sh = new StateHelper(recorder);
if (!sh.configure(time))
return;
recorder.setContentDescriptor(new FileTypeDescriptor(FileTypeDescriptor.WAVE));
//数据压缩
TrackControl track[] = recorder.getTrackControls();
boolean encodingPossible = false;
for (int i = 0; i < track.length; i++) 
{
try 
{
track[i].setFormat(new AudioFormat(AudioFormat.IMA4_MS));
encodingPossible = true;

catch (Exception e) 
{
//cannot convert to IMA4_MS
track[i].setEnabled(false);
}
}
if (!encodingPossible) 
{
sh.close();
return;
}

if (!sh.realize(time))
return;
dest = new MediaLocator("file://"+GetRecordName());
filewriter = Manager.createDataSink(recorder.getDataOutput(),dest);
filewriter.open();
filewriter.start();
sh.prefetch(time);
sh.playToEndOfMedia(time);
sh.close();
以上代码放在一个单独的线程中运行,可是会造成程序界面失去响应.
主要是执行到sh.playToEndOfMedia(time)处会等待返回,此时整个程序挂起.
这是为什么啊? 为什么播放时是立即返回的?