2012-04-29 2 views
0

У меня есть класс, который расширяет Swing JFrame. Чтобы этот класс получил обратный вызов и вызвал метод в этом классе, класс должен расширить класс POA. Я не знаю, как это сделать. Как насчет множественного наследования? Должен ли я создать другой класс, который расширяет класс POA?Java Получение CORBA Callback с Swing

Код

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:[email protected]: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); 
       } 
      } 
     }); 

    } 
+0

код пожалуйста? это поможет ... – andersoj

ответ

1

Он не должен расширить класс POA, если вы в контроле IDL: вы можете определить функцию обратного вызова через RMI/IIOP, генерировать IDL из удаленного интерфейса при генерации заглушку (rmic -iiop) и использовать PortableRemoteObject.exportObject() для ее экспорта. Не нужно расширять какой-либо конкретный класс.

Сказав все это, это неправильный ответ. Для вашего класса, расширяющего JFrame, нет необходимости также выполнять обратный вызов CORBA. Определите свой обратный вызов CORBA как совершенно отдельный класс и предоставьте ему крючки в ваш класс расширения JFrame, чтобы делать все, что требуется, когда обратный вызов происходит.