0

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

    }
4

1 に答える 1

1

IDLを制御している場合は、POAクラスを拡張する必要はありません。RMI/ IIOPを介してコールバックを定義し、スタブの生成時にリモートインターフェイスからIDLを生成し(rmic -iiop)、PortableRemoteObjectを使用できます。 exportObject()を使用してエクスポートします。特定のクラスを拡張する必要はありません。

そうは言っても、それは間違った答えです。JFrame拡張クラスは、CORBAコールバックである必要はありません。CORBAコールバックを完全に別個のクラスとして定義し、コールバックが発生したときに必要なことをすべて実行するために、JFrame拡張クラスへのフックを提供します。

于 2012-04-29T02:30:33.993 に答える