Java 使用 Swing 接收 CORBA 回调

标签 java callback corba

我有一个扩展 Swing JFrame 的类。为了让此类接收回调并调用此类中的方法,该类应扩展 POA 类。我不知道该怎么做。那么多重继承呢?我应该创建另一个类来扩展 POA 类吗?

代码

public final class JFSECorbaClient extends javax.swing.JFrame {

//
// init and other method
//

public static void main(final String args[]) throws ClassNotFoundException, IllegalAccessException, InstantiationException{

        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                frame = new JFSECorbaClient().setVisible(true);
                try {

                    //initialize orb
                    Properties props = System.getProperties();
                    props.put("org.omg.CORBA.ORBInitialPort", "1050");
                    props.put("org.omg.CORBA.ORBInitialHost", "localhost");
                    ORB orb = ORB.init(args, props);
                    System.out.println("Initialized ORB");

                    //Instantiate Servant and create reference
                    POA rootPOA = POAHelper.narrow(
                            orb.resolve_initial_references("RootPOA"));
                    rootPOA.activate_object(this.frame); //this.frame should extends jfseCallbackPOA
                    ref = jfseCallbackHelper.narrow(
                            rootPOA.servant_to_reference(callbackListener));

                    //Resolve MessageServer
                    jfseServer = jfseORBHelper.narrow(
                            orb.string_to_object("corbaname:iiop:1.2@localhost:1050#MessageServer"));

                    //Activate rootpoa
                    rootPOA.the_POAManager().activate();
                    //thread for receive callback in other class thread
                    JFSECorrbaListener th = new JFSECorrbaListener();
                    th.setOrb(orb);
                    th.start();

                } catch (Exception e) {
                    System.out.println(e);
                }
            }
        });

    }

最佳答案

如果您控制 IDL,则不必扩展 POA 类:您可以通过 RMI/IIOP 定义回调,在生成 stub (rmic -iiop) 时从远程接口(interface)生成 IDL,并且使用 PortableRemoteObject.exportObject() 导出它。无需扩展任何特定类。

话虽如此,但这是错误的答案。您的 JFrame 扩展类不需要同时是 CORBA 回调。将 CORBA 回调定义为一个完全独立的类,并为其提供与 JFrame 扩展类的 Hook ,以便在回调发生时执行所需的操作。

关于Java 使用 Swing 接收 CORBA 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369152/

相关文章:

java - 创建用户 ID(0001、0002 等)CORBA/Java

java - 如何安全地读取可能是二进制的文本文件?

javascript - 处理 Node 的异步特性 - writeFile 回调

java - Sun/Oracle CORBA 实现是否有线程池以及如何配置它?

c++ - 我怎样才能让我的回调函数知道调用它的 vector 的哪个元素?

python - 如何在 Keras 中创建自定义回调?

java - 在 Any 中插入对象数组

java - org.apache.openjpa.persistence.PersistenceException : null keys not allowed (OpenJPA)

java - Jackson MappingException 与 Websphere Application Server

java - 代号一个应用程序不适合 Windows 构建