0

iPOJO に関して簡単な質問があります。

コンポーネント iPOJO がスリープ状態になると、残りのコンポーネントもすべて無効になりますが、それらの間に依存関係はありません。なんで?次に例を示します。

コンポーネント 1:

@Component(name="frame1", immediate=true)
@Instantiate(name="iframe1")
public class Frame1 implements Runnable{

    String str;
    Label lb = new Label();
    TextField tf = new TextField();
    Frame fr;
public void run() {
    fr = new Frame("Frame1");
    fr.setLayout(new BorderLayout());
    fr.setSize(230, 200);
    fr.setLocation(900,250);
    fr.add(tf, BorderLayout.NORTH);
    lb.setText("Result");
    fr.add(lb, BorderLayout.CENTER);
    Panel pn = new Panel();
    fr.add(pn, BorderLayout.SOUTH);
    pn.setLayout(new GridLayout(1,4,1,1));
    Button bt = new Button("Printer 1");
    pn.add(bt);
    bt.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                System.out.println("start sleep");
                Thread.sleep(5000);
                System.out.println("stop sleep");
            } catch (InterruptedException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

    });

    fr.setVisible(true);
 }
 @Validate
 public void start() {
     //this.delayService = dls;
     Thread th = new Thread(this);
     th.start();
 }
 @Invalidate
 public void stop() {
     System.out.println("stop");
     fr.setVisible(false);
 }
}    

コンポーネント 2:

@Component(name="frame2", immediate=true)
@Instantiate(name="iframe2")
public class Frame2 implements Runnable{

String str;
Label lb = new Label();
TextField tf = new TextField();
Frame fr;
public void run() {
    System.out.println("start component 2");
    fr = new Frame("Frame2");
    fr.setLayout(new BorderLayout());
    fr.setSize(230, 200);
    fr.setLocation(900,250);
    fr.add(tf, BorderLayout.NORTH);
    lb.setText("Result");
    fr.add(lb, BorderLayout.CENTER);

    Panel pn = new Panel();
    fr.add(pn, BorderLayout.SOUTH);
    pn.setLayout(new GridLayout(1,4,1,1));
    Button bt = new Button("Printer 2");
    pn.add(bt);
    bt.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("in 2");
        }
    });

    fr.setVisible(true);
}
@Validate
 public void start() throws Exception {
     //this.delayService = dls;
     System.out.println("start thread 2");
     Thread th = new Thread(this);
     th.start();

     //fr.setVisible(true);
 }
 @Invalidate
 public void stop() throws Exception {
     System.out.println("stop");
     fr.setVisible(false);
 }
}

2 つのコンポーネントがデプロイされ、実行されています。2 つの独立したコンポーネントがあります。しかし、「プリンター1」ボタンをクリックします。「frame1」コンポーネントは 5 秒間スリープ状態です。そして、この 5 秒間、「frame2」コンポーネントの「Printer 2」をクリックできません。

4

1 に答える 1