0

カプセル図に基づいたJavaプログラムがあり、カプセル、ポート、およびstate_machineの3つのクラスがあります。状態の統計マシンは、その状態の番号を表示します。プログラムの動作原理はこのようなものです

ミアン:

public class SimpleCapsule {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    Port p2=new Port(null);

    Capsule1 c1= new Capsule1(3,1, p2, null);
    Capsule1 c2= new Capsule1(2,-3, null, p2);    

    //while ( false ){
        c1.state.start();
        c2.state.start();
      //  }
   }
}

ポート:

パブリック クラス ポート {

private Port connect;
public boolean signal=true;

public Port (Port c){
    this.connect=c;
    }
 public void snedSignal(boolean b){
    if (this.connect!=null){
    this.connect.signal=b;
    } 
}

public boolean getSignal(){ return this.signal; } }

カプセル:

 public class Capsule1 {
      public StateMachine1 state; public Port port;    

 public Capsule1 (int i, int signal, Port connecte, Port thisPort){

     if (thisPort!=null){
         this.port=thisPort;
         }else{
         port=new Port(connecte);
         }    

     state= new StateMachine1 (i,signal,this.port);
     }

 }

ステート マシン:

public class StateMachine1 extends Thread{
    public boolean signal=false;
    public int nr, signalSend;    
    public Port port;

    public StateMachine1(int i, int signalNr, Port p){
        this.nr=i;        
        this.signalSend=signalNr;
        this.port=p;
    }    


    @Override
    public void run(){        
        System.out.println(nr+"started");
    while (true){
        if (this.port.getSignal()){
            for (int i=0; i<this.nr;i++){                
                System.out.println(nr+"th: "+i+" sS");                                            
                    if (signalSend==i){
                        port.snedSignal(true);                            
                    }else{
                        port.snedSignal(false);                        
                    }   
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(StateMachine1.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }else{
            System.out.print(nr+"TH-"+this.port.getSignal()+" ");                    
        }
    }
    }
}

このように、プログラムはうまく動作しますが、ステート マシン クラスの最後の raw をコメントすると System.out.print(nr+"TH-"+this.port.getSignal()+" ");、2 番目のステート マシンSM2は、3 番目または 4 番目の開始信号の後に受信しません。

何が問題ですか?このシグナリング プロセスのどこで間違いを犯しましたか?

4

0 に答える 0