0

Red50.9サーバーでJavaを使用する際に問題が発生しました。コードは次のとおりです。

package com.hwakin.i5lc.manager;

import java.util.Iterator;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IClient;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.red5.server.api.Red5;
import org.red5.server.api.service.IServiceCapableConnection;

import com.hwakin.i5l.vo.ExternalPoint;
import com.hwakin.i5l.vo.UserInfo;
import com.hwakin.i5lc.vo.ExternalDrawInfo;

public class I5lcDrawManager extends ApplicationAdapter {
    protected static Log log = LogFactory.getLog(I5lcDrawManager.class.getName());

public void startDrawingHandler(String type,ExternalPoint point, ExternalDrawInfo data){

         try{
            IConnection Lconn = Red5.getConnectionLocal();

            IScope scope = Lconn.getScope();

            Iterator<IConnection> it = scope.getConnections();

            while (it.hasNext()) {
                IConnection conn = it.next();

                if (Lconn.equals(conn)) {
                    continue;
                }

                log.info("i5lvDrawManagerReceiver.startDrawingHandler invoked.");

                IClient client = conn.getClient();

                UserInfo userInfo =(UserInfo) client.getAttribute("userInfo");


                if (conn instanceof IServiceCapableConnection) {
                    if(userInfo.lectureInfo.sync.equals("true")){

                        ((IServiceCapableConnection) conn).invoke("invoke",new Object[]{"i5lvDrawManagerReceiver.startDrawingHandler",type,point,data});
                    }       
                }   
            }

        }catch(Exception e){
                log.debug("Exception in noticeChattingTo Method:"+e);
        }
    }
    public void drawingHandler(String type,ExternalPoint point){

         try{
            IConnection Lconn = Red5.getConnectionLocal();
            IScope scope = Lconn.getScope();

            Iterator<IConnection> it = scope.getConnections();

            while (it.hasNext()) {
                IConnection conn = it.next();

                if (Lconn.equals(conn)) {
                    continue;
                }

                log.info("i5lvDrawManagerReceiver.drawingHandler invoked.");

                IClient client = conn.getClient();

                UserInfo userInfo =(UserInfo) client.getAttribute("userInfo");


                if (conn instanceof IServiceCapableConnection) {
                    if(userInfo.lectureInfo.sync.equals("true")){

                        ((IServiceCapableConnection) conn).invoke("invoke",new Object[]{"i5lvDrawManagerReceiver.drawingHandler",type,point});

                    }

                }   
            }

        }catch(Exception e){
                log.debug("Exception in noticeChattingTo Method:"+e);
        }
    }

    public void endDrawingHandler(String type,ExternalPoint point, ExternalDrawInfo data){

         try{
            IConnection Lconn = Red5.getConnectionLocal();
            IScope scope = Lconn.getScope();

            Iterator<IConnection> it = scope.getConnections();

            while (it.hasNext()) {
                IConnection conn = it.next();

                if (Lconn.equals(conn)) {
                    continue;
                }

                log.info("i5lvDrawManagerReceiver.endDrawingHandler invoked.");

                IClient client = conn.getClient();

                UserInfo userInfo =(UserInfo) client.getAttribute("userInfo");


                if (conn instanceof IServiceCapableConnection) {
                    if(userInfo.lectureInfo.sync.equals("true")){

                        ((IServiceCapableConnection) conn).invoke("invoke",new Object[]{"i5lvDrawManagerReceiver.endDrawingHandler",type,point,data});
                    }       
                }   
            }

        }catch(Exception e){
                log.debug("Exception in noticeChattingTo Method:"+e);
        }
    }
}

エラーは次のとおりです。

  1. /opt/red5/dist/webapps/i5lecture/WEB-INF/src/com/hwakin/i5lc/manager/I5lcDrawManager.javaのエラー(29行目)

    Iterator <IConnection> it = scope.getConnections();
    

タイプの不一致:Collection <Set<IConnection>>からIteratorに変換できません

  1. /opt/red5/dist/webapps/i5lecture/WEB-INF/src/com/hwakin/i5lc/manager/I5lcDrawManager.javaのエラー(63行目)

    Iterator<IConnection> it = scope.getConnections();
    

タイプの不一致:Collection <Set<IConnection>>からIterator<IConnection>に変換できません

  1. /opt/red5/dist/webapps/i5lecture/WEB-INF/src/com/hwakin/i5lc/manager/I5lcDrawManager.javaのエラー(100行目)

    Iterator<IConnection> it = scope.getConnections();
    

タイプの不一致:Collection <Set<IConnection>>からIterator<IConnection>に変換できません

3つの問題(3つのエラー)

4

4 に答える 4

2

あなたがそれが戻るべきだと思っているように見える間、あなたのgetConnections()メソッドは戻るように聞こえます。Collection<Set<IConnection>>Iterator<IConnection>

あなたはへの呼び出しを忘れています.iterator()か?そのような

Iterator<IConnection> it = scope.getConnections.iterator();

コンパイラエラーからは、必要になるように聞こえますが

Iterator<Set<IConnection>> it = scope.getConnections.iterator();
于 2009-11-06T02:47:00.613 に答える
2

ACollectionは、Iterableではなく、Iteratorです。Iteratorループする必要はありません。拡張されたforループは、どのIterable実装でも機能します。

代わりにこれを試してください:

for (Set<IConnection>> connections : scope.getConnections()) {
  for (IConnection con : connections) {
    /* Use each 'conn' instance... */
  }
}
于 2009-11-06T03:34:37.147 に答える
2

scope.getConnection();を解析するために(Iterator)を追加しました。

Iterator<IConnection> it = (Iterator) scope.getConnections();

次に、関数の先頭に@SuppressWarnings( "unchecked")を追加しました

@SuppressWarnings("unchecked")
    public void startDrawingHandler(String type,ExternalPoint point, ExternalDrawInfo data){

   // Rest of the code

}
于 2009-11-06T06:37:21.397 に答える
1

ここにあるように見えるのは不安定なAPIです。

Iterator<IConnection> getConnections()それともCollection<Set<IConnection>> getConnections()(「接続イテレータを取得する」として適切に文書化されています。-コメントは嘘をつきます)?Googleはあなたの友達です。

于 2009-11-06T03:51:10.953 に答える