Android应用程序在尝试打开两个DataInputStreams时挂起



我正在编写这个应用程序,我需要同时打开两个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;       
    }

当你说它挂起时,你是长时间没有得到任何响应还是得到一个异常?

更多代码:

  1. 你可以打开流但是不能关闭它们。或者你会在应用程序的其他部分使用这种控制吗?
  2. 打开流而不使用某种连接超时是一个坏主意。
  3. 异常不会打印任何东西,因为你应该使用e.p printstacktrace()打印它或将消息发送到某些日志/输出。

相关内容

  • 没有找到相关文章

最新更新