我已经在这方面工作了几个星期才能让它运转但没有成功。我正在使用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);
}
});
答案 0 :(得分:3)
如果您将postMessage()
设为静态,请执行以下操作:
public static void postMessage(final String msg);
...然后您可以static
对processMessage()
方法进行调用,如下所示:
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);
}
}
内部类可以引用其包含类的字段的神奇配方吗?