好吧,这让我非常生气。我已经在Internet上关注了将近8个教程,最后,我使Red5服务器实例正常工作。对我好!但是,当我从AS3应用程序在Red5应用程序中调用Java方法时,在Eclipse的“控制台”窗口中,出现此错误:

[ERROR] [NioProcessor-1] org.red5.server.service.ServiceInvoker - Method getTheName with parameters [] not found in org.red5.core.Application@17e5fde


这是我的Application.java文件。

package org.red5.core;

import org.red5.server.adapter.ApplicationAdapter;
import org.red5.server.api.IConnection;
import org.red5.server.api.IScope;
import org.red5.server.api.service.ServiceUtils;

/**
 * Sample application that uses the client manager.
 *
 * @author The Red5 Project ([email protected])
 */
public class Application extends ApplicationAdapter {

    /** {@inheritDoc} */
    @Override
    public boolean connect(IConnection conn, IScope scope, Object[] params) {
        return true;
    }

    /** {@inheritDoc} */
    @Override
    public void disconnect(IConnection conn, IScope scope) {
        super.disconnect(conn, scope);
    }

    public String getTheName() { return "MyName!"; }
}


这是我的AS3代码。我只是将其放在时间轴上。

var nc:NetConnection = new NetConnection();
nc.connect("http://localhost/Mintium/RoomHere", "SomeUsernameHere");
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.objectEncoding = ObjectEncoding.AMF0;

function onNetStatus(e:NetStatusEvent):void
{
    switch (e.info.code)
    {
        case "NetConnection.Connect.Success" :
            trace("connected");
                              nc.call("getTheName", new Responder(getName_result, getName_error));
            break;
    }
}

function getName_result(res:Object):void { append("Name : " + res.toString()); }
function getName_error(res:Object):void { append(res.toString()); }


我一直试图弄清楚这已经过去了一周,而我的日期是下个月。如果这些问题没有解决,我将无法通过评估。请帮我解决我的问题。非常感谢你。

最佳答案

抱歉,两个月前我没有看到此信息,我本可以帮助您通过评估。不过,我有一个类似的问题,也就是Red5服务,我想我可以回答这个问题。

解决此问题的关键在于Red5中利用Spring框架的那些部分。在您的项目中,应该有一个名为red5-web.xml的文件,该文件位于Server项目的WEB-INF文件夹中。该文件包含Red5的Spring组件使用的Bean依赖项。在我阅读的教程中,甚至在大多数(而不是稀疏和分布式的)red5编程文档中都没有提到这一点。

您要做的是在该文件中为您的方法添加一个bean条目。在您的情况下,该条目应如下所示:

<bean id="getTheName.service" class="org.red5.core.Application" />


请注意,我使用的是您的函数名称,并附加了“ .service”。我不明白为什么,但是您需要附加“ .service”以便Red5查找您的功能。您需要为每个要用作其功能的类添加一个类似的条目。

当然,我上面所说的一切都是基于将服务放入Application类的事实,而我从没做过。如果您阅读red5-web.xml文件,您将看到该类已经存在一个条目,因为它已经通过Spring注入,作为充当处理Web请求的“端点”的类。我不知道将Application类用作端点和服务提供者是否是一个好主意(它违反了OOP中的“关注点分离”,并可能导致Spring问题)。

我通常要做的是在org.red5.core软件包(或您可能需要的任何其他软件包)中添加一个单独的类,以提供所需的服务,然后在red5-web.xml中添加一个条目,以注入该类及其方法。因此,对于您的项目,假设您在org.red5.core包中有一个名为NameProvider的类:

public class NameProvider
{
   public NameProvider() {}
   public String getTheName() { return("MyName!"); }
}


然后将以下条目添加到red5-web.xml文件中:

<bean id="getTheName.service" class="org.red5.core.NameProvider" />


那应该使一切正常。

希望以后对您或其他有此问题的人有所帮助。我只是希望我能早点看到这个问题。

关于java - 无法从AS3 Flash CS6调用Red5服务器中的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15174752/

10-13 05:27