从另一个类调用对象(java,javafx)

时间:2010-02-06 22:14:12

标签: java xmpp javafx

我已经在这方面工作了几个星期才能让它运转但没有成功。我正在使用Javafx和java来实现使用smack API(xmpp)的小型聊天程序。问题是如何将收到的消息从java传递到javafx。当我使用像“test message”这样的静态字符串变量并在java中调用postMessage将其发送到javafx时,下面的代码实际上正在工作。但是如何从java调用postMessage获取另一个对象(MessageListener)?

public class Java_callback implements RunnableFuture {
FXListener listener;

public String testmsg;


public Java_callback(FXListener listener) {
    this.listener = listener;

}

@Override
public void run() throws Exception {

    postMessage(testmsg);
}

public void postMessage(final String msg) {
    Entry.deferAction(new Runnable() {
        @Override
        public void run() {
            listener.callback(msg);
        }
    });
}
}

这里是处理消息的代码。这部分需要从上面的代码中调用postMessage。

    public void xmpp_create_chat(String msg) {

    ChatManager chatmanager = connection.getChatManager();
    Chat newChat = chatmanager.createChat("admin@unfc", new MessageListener() {

        @Override
        public void processMessage(Chat chat, Message message) {
            //msgArray.add( new String("Received message: " + message.getBody()) );
            //msg_return = "blabla";

            //java_callback.postMessage(msg_return);
            //test.postMessage(message.getBody());
            //System.out.println("Received message: " + message);

        }
    });

2 个答案:

答案 0 :(得分:3)

如果您将postMessage()设为静态,请执行以下操作:

public static void postMessage(final String msg);

...然后您可以staticprocessMessage()方法进行调用,如下所示:

Java_callback.postMessage(msg_return);

更新:同时更改您的初始化听众。

private static FXListener listener;

希望这不会破坏提供的代码之外的东西:)

答案 1 :(得分:0)

包含第二个函数的类必须引用第一个对象,以便它可以进行调用。

这里需要的是如此基本,以至于很难弄清楚一个例子是什么。

第二堂课就是这样的:

class MessageReceiver {
  private Java_callback callback;

  public void setJava_callback(Java_callback callback) {
    this.callback = callback;
  }
  ....
   void process_message(...) { // inside your inner class
     calllback.postMessage(msg);
   }

}

内部类可以引用其包含类的字段的神奇配方吗?