⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 runpn.java

📁 petrinets小程序
💻 JAVA
字号:
import java.util.*;public class runPN extends Thread {    static pn PNet;    Editor Ed;    visOfGraph Vis;    int StepCount;    int mode;    int vismode;    int delay;    boolean demo;    boolean selected;    boolean single;    transition selectedTransition;    static final int PARMAN = 0;    static final int PARRAN = 1;    static final int SEQMAN = 2;    static final int SEQRAN = 3;    static final int CODE = 99;    public runPN(pn pnet, Editor ed, visOfGraph vi, int m, boolean sing) {        super("RunPN");        PNet = pnet;        Ed = ed;        Vis = vi;        StepCount = 0;        mode = m;        delay = 0;        selected = false;        single = sing;        demo = false;    }    public void setPN(pn pnet) {        PNet = pnet;    }    public void setEditor(Editor ed) {        Ed = ed;    }    public void setVis(visOfGraph vi) {        Vis = vi;    }    public void setDemo(boolean d) {        demo = d;    }    public void setMode(int m) {        mode = m;    }    public void enableSingleStep() {        single = true;    }    public void disableSingleStep() {        single = false;    }    public void select(transition t) {        selected = true;        selectedTransition = t;	resume();    }    public void restoreVisMode() {        if (mode == SEQMAN || mode == PARMAN) {            Vis.setMode(vismode, CODE);            PNet.unhighlightAllTransitions();            Vis.repaint();        } else {	    PNet.unhighlightAllTransitions();	    Vis.repaint();        }    }    public void holdVisMode() {        vismode = Vis.getMode();        Vis.setMode(visOfGraph.SELECTMODE, 0);        Vis.repaint(1);    }    public void blink(transition t) {        for (int i = 0; i < 3; i++) {            t.highlight = true;            Vis.repaint();            try {                Thread.sleep(500);            }            catch (InterruptedException l) {}            t.highlight = false;            Vis.repaint();            try {                Thread.sleep(500);            }            catch (InterruptedException l) {}         }    }    public void blink(Vector v) {           //new 18.5.97 jw        for (int i = 0; i < 3; i++) {            for (int j = 0; j < v.size(); j++) {                ((transition)v.elementAt(j)).highlight = true;            }            Vis.repaint();            try {                Thread.sleep(500);            }            catch (InterruptedException l) {}            for (int j = 0; j < v.size(); j++) {                ((transition)v.elementAt(j)).highlight = false;            }            Vis.repaint();            try {                Thread.sleep(500);            }            catch (InterruptedException l) {}        }    }    public void run() {                      //New 22.5.97 ah        delay = Ed.getDelay();               //New 13.6.97 jw        demo = Ed.getDemo();        switch (mode) {        case runPN.SEQRAN :            transition t;            boolean changedseq;            boolean ret = false;            boolean increaseCounter;            Vector seq = new Vector();            while (! PNet.isDead(true)) {                for (int i = 0; i < PNet.numberOfTransitions(); i++){                    t = PNet.getTransition(i);                    t.randomize();                    if (t.canFire(PNet,true)) seq.addElement(t);                }                transition seqtemp = (transition)seq.elementAt(0);                for (int i = 1; i < seq.size()-1; i++) {                    if (seqtemp.getRanval() > ((transition)seq.elementAt(i)).getRanval())                        seqtemp = ((transition)seq.elementAt(i));                }                t = seqtemp;                increaseCounter = t.canFire(PNet,true);                if (increaseCounter) {		    if (demo) blink(t);		    t.fire(PNet,true);                    StepCount++;                    Vis.repaint();                    Ed.setCount(StepCount);                    if (single) {                        Ed.runIsHolding();                        suspend();                    } else {                        try {                            Thread.sleep(delay);                        }                        catch (InterruptedException l) {}                    }                }            }            StepCount = 0;	    Ed.runButtonsUnHighlight();            Ed.setStatus("Petri Net is dead!");            break;        case runPN.SEQMAN :            transition t1;	               while (! PNet.isDead(false)) {                for (int i = 0; i < PNet.numberOfTransitions(); i++) {                    t1 = PNet.getTransition(i);                    if (t1.canFire(PNet, false)) {                        t1.highlight = true;                    }                }                selected = false;                holdVisMode();                setPriority(Thread.MIN_PRIORITY);                while (! selected) {		  suspend();		}                setPriority(Thread.NORM_PRIORITY);                selectedTransition.fire(PNet, false);                StepCount++;                Ed.setCount(StepCount);                restoreVisMode();                if (single) {                    Ed.runIsHolding();                    suspend();                }            }            StepCount = 0;	    Ed.runButtonsUnHighlight();            Ed.setStatus("Petri Net is dead!");            break;        case runPN.PARRAN :            transition t2;            boolean changed;            boolean increaseCounter1;            transition prio, nextprio, help;            Vector par = new Vector();            while (! PNet.isDead(false)){                for (int i = 0; i < PNet.numberOfTransitions(); i++){                    t2 = PNet.getTransition(i);                    t2.randomize();                    if (t2.canFire(PNet,false)) par.addElement(t2);                }                do {                    changed = false;                    int size = (par.size()-1);                    for (int i = 0; i < size ; i++){                        prio = (transition) par.elementAt(i);                        nextprio = (transition) par.elementAt(i+1);                        if (prio.getRanval() < nextprio.getRanval() ) {                            help = nextprio;                            par.removeElementAt(i+1);                            par.insertElementAt(prio, i+1);                            par.removeElementAt(i);                            par.insertElementAt(help, i);                            changed = true;                        }                    }                } while (changed);                par = PNet.multipleCanFire(par,false);                if (demo) {                    blink(par);                }                increaseCounter1 = false;                for (int i = 0; i< par.size(); i++){                    t2 = (transition) par.elementAt(i);                    increaseCounter1 = (t2.fire(PNet, false));                  }                Vis.repaint();                par.removeAllElements();                if (increaseCounter1) {                    StepCount++;                    Vis.repaint();                    Ed.setCount(StepCount);                    if (single) {                        Ed.runIsHolding();                        suspend();                    } else {                        try {                            Thread.sleep(delay);                        }                        catch (InterruptedException l) {}                    }                }                increaseCounter1 = false;            }            StepCount = 0;	    Ed.runButtonsUnHighlight();            Ed.setStatus("Petri Net is dead!");            break;        case runPN.PARMAN :            transition t3,t4;            boolean changed2 = false;            boolean moreThanOne;            int weights, items;            transition prio2, nextprio2, help2;            int i,j;            Vector par2 = new Vector();            Vector fired = new Vector();            while (! PNet.isDead(false)){              for (i = 0; i < PNet.numberOfTransitions(); i++){                    t3 = PNet.getTransition(i);                    t3.randomize();                    if (t3.canFire(PNet,false))                        par2.addElement(t3);                }                do {                    changed2 = false;                    int size = (par2.size()-1);                    for (i = 0; i < size ; i++){                        prio2 = (transition) par2.elementAt(i);                        nextprio2 = (transition) par2.elementAt(i+1);                        if (prio2.getRanval() < nextprio2.getRanval() ) {                            help2 = nextprio2;                            par2.removeElementAt(i+1);                            par2.insertElementAt(prio2, i+1);                            par2.removeElementAt(i);                            par2.insertElementAt(help2, i);                            changed2 = true;                        }                    }                } while (changed2);                moreThanOne = false;                Vector fireable = new Vector();                for (i = 0; i < par2.size(); i++){                  transition test = (transition) par2.elementAt(i);                  if ((PNet.getAllConnectedFireableTrans(test, false)).size() > 1) {                    moreThanOne = true;                    fireable.addElement(test);                  }                }                if (moreThanOne){                  pn.subVectorOfVector(fireable, par2);                  for (i=0; i < fireable.size(); i++){                    t4 = (transition) fireable.elementAt(i);                    t4.highlight = true;                  }                  holdVisMode();                  while (fireable.size() > 1) {                    selected = false;                    setPriority(Thread.MIN_PRIORITY);                    while (! selected) {		      suspend();		    }                    setPriority(Thread.NORM_PRIORITY);                    fired = PNet.getAllConnectedTrans(selectedTransition);                    for (int k = 0; k < fired.size(); k++) {                      transition unhigh = (transition) fired.elementAt(k);                      unhigh.highlight = false;                    }                    if (demo) blink(selectedTransition);                    selectedTransition.fire(PNet, false);                    Vis.repaint();                    pn.subVectorOfVector(fired, fireable);                  }                  restoreVisMode();                  if (fireable.size() == 1) {                    ((transition)fireable.elementAt(0)).fire(PNet, false);                    Vis.repaint();                  }                }                par2 = PNet.multipleCanFire(par2, false);                if (demo) {                           blink(par2);                          }                for (i=0; i < par2.size(); i++){                     transition fire = (transition) par2.elementAt(i);                     fire.fire(PNet, false);                }                par2.removeAllElements();                StepCount++;              //zaehlt vielleicht nicht richtig                Vis.repaint();                Ed.setCount(StepCount);                if (single) {                   Ed.runIsHolding();                   suspend();                } else {                   try {                     Thread.sleep(delay);                   }                   catch (InterruptedException l) {}                }            }            StepCount = 0;	    Ed.runButtonsUnHighlight();            Ed.setStatus("Petri Net is dead!");            break;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -