Вызов объекта из другого класса (java, javafx) - PullRequest
2 голосов
/ 07 февраля 2010

Я уже несколько недель работаю над этим, чтобы все заработало, но безуспешно. Я использую Javafx и java для реализации небольшой программы чата с использованием API smack (xmpp). Проблема в том, как получить полученные сообщения из java в javafx. Код ниже действительно работает, когда у меня есть переменная со статической строкой, такой как «тестовое сообщение» и вызывающая postMessage в Java, чтобы отправить ее в javafx. Но как я могу получить другой объект (MessageListener) из Java, вызывающий postMessage?

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 ]

3 голосов
/ 07 февраля 2010

Если вы сделаете postMessage() статическим, как в:

public static void postMessage(final String msg);

... тогда вы можете сделать вызов метода static из processMessage(), например:

Java_callback.postMessage(msg_return);

ОБНОВЛЕНИЕ: также измените инициализацию слушателя.

private static FXListener listener;

Надеемся, что это не нарушает что-либо за пределами предоставленного кода:)

0 голосов
/ 07 февраля 2010

Класс, содержащий вашу вторую функцию, должен иметь ссылку на первый объект, чтобы он мог выполнить вызов.

То, что здесь нужно, настолько основательно, что трудно понять, каким может быть пример.

что-то вроде этого для вашего второго класса:

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

}

Является ли магический рецепт, которым внутренние классы могут обращаться к полям своего содержащего класса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...