代码之家  ›  专栏  ›  技术社区  ›  Chris-NTA

从另一个类调用对象(Java,JavaFX)

  •  2
  • Chris-NTA  · 技术社区  · 16 年前

    我已经为此工作了几个星期,但没有成功。我使用JavaFX和Java来实现一个小型聊天程序,使用SAMACK API(XMPP)。问题是如何将收到的消息从Java传递到JavaFX。当我有一个静态字符串,比如“测试消息”,并调用Java中的POST消息将其发送到JavaFX时,下面的代码实际上是在工作。但是如何从Java调用PASSMEST获取另一个对象(MasaGelistAgent)呢?

    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 回复  |  直到 16 年前
        1
  •  3
  •   Dolph    16 年前

    如果你做 postMessage() 静态,如:

    public static void postMessage(final String msg);
    

    …然后你可以做一个 static 方法调用自 processMessage() ,如:

    Java_callback.postMessage(msg_return);
    

    更新:也更改你的监听器初始化。

    private static FXListener listener;
    

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

        2
  •  0
  •   bmargulies    16 年前

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

    这里需要的是非常基本的,所以很难弄清楚一个例子可能是什么。

    你的第二节课是这样的:

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

    }

    内部类是否可以引用其包含类的字段?