0

画像をストリーミングするためにいずれかのストリームに切り替える機能を使用して、2 つの InputStreams を同時に開く必要があるこのアプリを作成しています。最初のストリームを開くことはできましたが、2 番目のストリームを開こうとするとハングします。以下はコードです。コードがハングする場所にコメントを作成しました。私が何か間違っているかどうか説明していただけますか?

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;       
    }
4

1 に答える 1

1

ハングアップしたと言うと、長い間応答がなかったり、例外が発生したりしませんか?

あなたのコードにもっと:

  1. ストリームを開きますが、決して閉じません。それとも、アプリの別の部分でその制御を行いますか?
  2. ストリームを開き、ある種の接続タイムアウトを使用しないのは悪い考えです。
  3. e.printStackTrace() で出力するか、メッセージをログ/出力に送信する必要があるため、例外は何も出力しません。
于 2013-03-27T13:11:36.613 に答える