我有一个基于胶囊图的java程序,其中我有3个类的capsule,port和state_machine。一个州的统计机构将其国家的nr称为prr。该计划的工作原理类似于this
mian:
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(){ 返回这个信号; } }
胶囊:
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()+" ");
}
}
}
}
像这样程序运行良好,但如果你评论状态机类的最后一个原始文件:System.out.print(nr+"TH-"+this.port.getSignal()+" ");
而不是第二个状态机 SM2 在第3或第4个信号之后没有收到开始。
有什么问题?我在这个信令过程中哪里犯了错误?