你究竟是要源代码还是UML图?从你的描述来看可以用消息驱动的BEAN实现。

解决方案 »

  1.   

    UML图也好,最好有一个示例的源码看看.很简单的就行.只要模型.
    BEAN不行,应因这是一个应用,严格来说是一个实时控制系统.
    其实就是消息与动作如何让控制部分进行控制时不造成递归.
    我设计的几个模型都是这样.看看我这个例子.如何改成不递归的模型.
    package autothreadex;/**
     * 此处插入类型说明。
     * 创建日期:(2002-7-30 23:54:13)
     * @author:Administrator
     */
    public class ThreadCtrl {
    public OrderCenter Lorder;
    public Robot Lrobot1;
    public Robot Lrobot2;
    /**
     * ThreadCtrl 构造子注解。
     */
    public ThreadCtrl() {
    super();
    }
    /**
     * 启动应用程序。
     * @param args 命令行自变量数组
     */
    public static void main(java.lang.String[] args) {
    //在此处插入用来启动应用程序的代码。
    Robot Lrobot1= new Robot();
    Robot Lrobot2= new Robot();
    OrderCenter Lorder=new OrderCenter();
    Lrobot1.Order="2";
    Lrobot2.Order="1";
    Lrobot1.Lorder=Lorder;
    Lrobot2.Lorder=Lorder;
    Lorder.LRobot1=Lrobot1;
    Lorder.LRobot2=Lrobot2;
    Lrobot1.start();
    }
    }package autothreadex;/**
     * 此处插入类型说明。
     * 创建日期:(2002-7-31 0:02:12)
     * @author:Administrator
     */
    public class Robot {
    public OrderCenter Lorder;
    public java.lang.String Order;
    /**
     * Robot 构造子注解。
     */
    public Robot() {
    super();
    }
    /**
     * 此处插入方法说明。
     * 创建日期:(2002-7-31 0:09:12)
     */
    public void start() {
    Lorder.sendOrder(Order);

    }
    }package autothreadex;/**
     * 此处插入类型说明。
     * 创建日期:(2002-7-30 23:58:31)
     * @author:Administrator
     */
    public class OrderCenter {
    public Robot LRobot1;
    public Robot LRobot2;

    /**
     * OrderCenter 构造子注解。
     */
    public OrderCenter() {
    super();
    }
    /**
     * 此处插入方法说明。
     此方法用来解释指令并用出相应的动作
     * 创建日期:(2002-7-30 23:59:42)
     * @param Order java.lang.String
     */
    public void sendOrder(String Order) { Times++;
    if(Times<5000)
    {

    if (Order.equals("2")) {
    LRobot2.start();
    } else {
    LRobot1.start();
    }
    }else{
    System.out.print("ok");
    }
    }
    public long Times=1;}这是递归的模型,无法长时工作,到一定的次数就出错了.
      

  2.   

    这是不是一个交替调度的问题?,能否在OrderCenter离开一个服务线程实现对机器人的交替调度?
    public class OrderCenter implements Runnable{
    .... public void run(){
    boolean mySwitch=false;
    while(true){
    if(mySwitch){
    LRobot1.process();
    }else{
    LRobot2.process();
    }
    mySwitch=!mySwitch;
    }
    }
    ...
      

  3.   

    我今天找了一个JAV智深的人士,他分析后说,这是UNIX和WINDOWS不同的地方,
    JAVA中实现这种方式,很难,因为JAVA不是建立在消息机制上的.
    各高手,有没有办法解决?
        其实说简单了就是多个对象实例之间的消息异步传递问题.其实我也想过
    一些,就是模拟WINDOWS的消息循环和消息对列来做.但这种做法,效率极低.高手们,开动脑筋吧!加油.
    来学习的帮忙UP啊.
      

  4.   

    你上面的代码会使OrderCenter无法接受到ROBOT的消息
    只是能控制他们,我的要求是互相间能互发消息.并且
    OrderCenter可以控制其它对象的行为.
      

  5.   

    绝对的实时是不可能的,即使unix,只要没有多个指令流水线(多处理器,或者在但处理器内集成多条流水线)cpu时间就得分片,但即便有多条流水线由于windows不支持进程方式,所以还是不如unix。消息队列,以不同的线程来相应不同的消息,可能这已经时迄今为止实时性最好的 java+windows 方案了.
    另外从软件工程的角度来说,“实时”这个词表示的也只是一种时间约束。
    如:b.responseTime<10ms,主要还看你的需求