Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于胶囊图的Java多线程程序_Java_Multithreading_Uml_Signals_State Machine - Fatal编程技术网

基于胶囊图的Java多线程程序

基于胶囊图的Java多线程程序,java,multithreading,uml,signals,state-machine,Java,Multithreading,Uml,Signals,State Machine,我有一个基于胶囊图的java程序,其中我有3个类胶囊、端口和状态机。一个州的统计机器表示该州的nr。程序的工作原理如下 棉线: public class SimpleCapsule { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here P

我有一个基于胶囊图的java程序,其中我有3个类胶囊、端口和状态机。一个州的统计机器表示该州的nr。程序的工作原理如下

棉线:

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;
    } 
}
公共布尔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()+" ");                    
        }
    }
    }
}
公共类StateMachine1扩展线程{
公共布尔信号=假;
公共int nr,信号发送;
公共港口;
公共状态机1(内部i、内部信号号、端口p){
这是nr=i;
this.signalSend=signalNr;
这个端口=p;
}    
@凌驾
public void run(){
系统输出打印项次(nr+“已启动”);
while(true){
if(this.port.getSignal()){

对于(int i=0;i您是如何检测到的,
SM2
在注释上述行后没有接收信号的?只有SM1正在打印数字,但是布尔值被发送为true。但是,当我打印原始数据时,它接收到信号。为什么-1?表述错误的问题?