使用Flerry在Java和Flex之间进行消息传递

时间:2011-07-22 06:44:16

标签: java flex messaging flex4.5

我目前正在开发一个项目,需要在不使用像Tomcat这样的服务器的情况下从空中与java通信。为此,我发现并使用了Flerry。

只要我尝试从我最初从Air实例化的类中发送消息,就可以在Java和Air之间进行通信。

我尝试做的是下载来自java中的Message Class的消息,并使用该类从Java向Air发送信息和错误。

MessageController.java:

public class MessageController 
{

    public MessageController()
    {

    }

    public static void sendErrorMessage(String errorMessage)
    {
        NativeObject.sendMessage(errorMessage, "error");
    }

    public static void sendInfoMessage(String infoMessage)
    {
        NativeObject.sendMessage(infoMessage, "info");
    }
}   

在Air中我在消息传递类上创建一个NativeObject并订阅消息:

var messageController:NativeObject = new NativeObject();
messageController.source = "controller.MessageController" ;
messageController.singleton = true;
messageController.debug = false;
messageController.addEventListener(FaultEvent.FAULT, onFileControllerFault, false, 0, true);

messageController.subscribe("info", infoMessageHandler);
messageController.subscribe("error", errorMessageHandler);

正如您所猜测的那样,这不起作用。 我似乎只能从我直接订阅的类中发送消息,例如,如果我这样做:

messageController.start();

在我的MessageController.java中我把它:

public void start()
{
NativeObject.sendMessage("test message", "info");
}

infoMessageHandler接收包含测试消息的消息,应该如此。

如何从Java中的任何类发送消息并在Air端捕获它们?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解这个问题,但是有一个原因你不能简单地通过Java'通信'类发送和接收所有消息吗?如果这有效,我只需在Java接口/通信类中设置公共方法并完成它。

(已经有一段时间了,因为我已经挖掘了Flerry如何工作,所以我不记得足以指出你所看到的行为的可能原因。)Flerry也是开源的,并不是很大。如果你真的想知道它为什么会以某种方式表现,我会打赌你可以通过查看来源来弄明白。 (我承诺,不会花费6个月的时间来学习一些Spring或Hibernate代码库,甚至是BlazeDS。)

我在一个小应用程序中使用Flerry,但是现在我想到了它,我只有一个类可以向Flex发送任何内容!但我觉得你可能需要用不同的方式来描述你面临的问题,因为这对我来说听起来像是预期的行为。