我正在编写这个应用程序,我需要同时打开两个InputStreams,并具有切换到任意一个流的能力,以便流式传输图像。我可以打开第一个流,但当我试图打开第二个流时,它挂起了。以下是代码,我做了一个评论,它挂起,你能解释我是否做错了什么吗?
public boolean Start()
{
numberOfServicesUsingThisInstanceLock.lock();
if (numberOfServicesUsingThisInstance > 0)
{
numberOfServicesUsingThisInstance++;
return true;
}
// else
numberOfServicesUsingThisInstance = 1;
bisList.clear();
disList.clear();
FrameTimeStampList.clear();
try
{
for (int i = 0; i < this.objConfig.lstCameraInfo.size(); i++)
{
FrameTimeStampList.add(Long.valueOf("-1"));
final CameraInfo ci = this.objConfig.lstCameraInfo.get(i);
String sourceUrl = GetMjpegUrlForCam(this.Type, ci.brand, ci.ipAddress);
Log.d("DUMPMJPEG_START", "URL: " + sourceUrl);
if (sourceUrl == "NONE") continue;
URL url = new URL(sourceUrl);
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication (ci.userName, ci.password.toCharArray());
}
});
Log.d("DUMPMJPEG_START", "OpenStream");
InputStream in = url.openStream(); // CODE HANGS HERE
Log.d("DUMPMJPEG_START", "Creating DataInputStream");
DataInputStream dis = new DataInputStream(in);
Log.d("DUMPMJPEG_START", "DataInputStream added to the DataInputStream List");
Log.d("DUMPMJPEG_START", "adding BufferedInputStreams to the list");
BufferedInputStream bis = new BufferedInputStream(dis);
Log.d("DUMPMJPEG_START", "BufferendInputStreams added to the list");
disList.add(dis);
bisList.add(bis);
}
}
catch(Exception ex)
{
ex.getMessage();
}
return false;
}
当你说它挂起时,你是长时间没有得到任何响应还是得到一个异常?
更多代码:
- 你可以打开流但是不能关闭它们。或者你会在应用程序的其他部分使用这种控制吗?
- 打开流而不使用某种连接超时是一个坏主意。
- 异常不会打印任何东西,因为你应该使用e.p printstacktrace()打印它或将消息发送到某些日志/输出。