カプセル図に基づいた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 番目の開始信号の後に受信しません。
何が問題ですか?このシグナリング プロセスのどこで間違いを犯しましたか?