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

Posted

技术标签:

【中文标题】从另一个类(java、javafx)调用对象【英文标题】:Calling an object from another class (java, javafx) 【发布时间】:2010-02-06 22:14:12 【问题描述】:

我已经为此工作了数周以使其正常工作,但没有成功。我正在使用 Javafx 和 java 来实现一个使用 smack API (xmpp) 的小型聊天程序。问题是如何将收到的消息从 java 获取到 javafx。当我有一个带有静态字符串(如“测试消息”)的变量并在 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);

        
    );

【问题讨论】:

【参考方案1】:

如果你将postMessage()设为静态,如:

public static void postMessage(final String msg);

...然后您可以从processMessage() 对其进行static 方法调用,如下所示:

Java_callback.postMessage(msg_return);

更新:也更改您的侦听器的初始化。

private static FXListener listener;

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

【讨论】:

public static void postMessage(final String msg) is not working because listener.callback(msg);(错误信息:“non-static variable listener cannot be referenced from a static context” 见我上面的更新。这将解决您的错误,但我很偏执它会破坏其他东西。【参考方案2】:

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

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

第二堂课是这样的:

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

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

【讨论】:

你有例子吗?抱歉,我是 java 新手。 Dolph Mathews 为我提供了解决方案。还是谢谢你。

以上是关于从另一个类(java、javafx)调用对象的主要内容,如果未能解决你的问题,请参考以下文章

当我从另一个调用接口方法时,Spring Boot(Java)中出现以下错误

Java调用JavaFX的方法

我如何以编程方式从另一种方法单击 JavaFX 中的按钮?

如何在 Java 中从另一个构造函数调用一个构造函数?

如何从另一个类调用菜单对象?

从另一个 .java 类调用 onClick 函数