zoukankan      html  css  js  c++  java
  • 使用java传参调用exe并且获取程序进度和返回结果的一种方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

    1.背景

    在某个项目中需要考虑使用java后台调用由C#编写的切图程序(exe),并且前端能够获取到切图的进度和相关描述信息。

    2.解决思路

    a.首先改造切图程序为接受参数从Main函数传递。

    b.编写java后台传参调用exe的函数。

    c.解决通信问题。

    3.具体实现

    3.1改写C#窗体程序

    C#中的入口程序为Main函数,其中Main函数默认是没有参数的,如果添加参数,其只支持一个String数组参数,入口改写如下:

                           

    将需要传入的参数写在args数组中,后续业务逻辑上因此做相关改写即可。

    3.2java端传参调用

    Java中可以利用Process类进行对exe或者是命名行cmd进行调用。具体例子如下:

     

    其中exec为传参调用,而waitFor函数为当前线程等待函数,并可获取到由该 Process 对象表示的进程终止后返回的值。

    如果exe中不设置返回参数,则默认执行正确为0。

    3.3通信设计

    3.3.1方案一

    a.前端发出请求,等待回应。

    b.后台接受请求,调用起exe。

    c.exe执行完后将信息写入到指定文本中。

    d.java端监听程序执行完毕后,获取指定文本。

    e.解析文本中的信息。信息可以按照自定义规则组织,传达所需表示的含义。

    f.将解析后的数据返回给前端。

    优点:

    前端无需轮询,等待返回结果即可。

    缺点:

    会出现请求超时问题,并且无法知道exe执行的目前状态。

    3.3.2方案二

    a.前端发出请求,并开始定时触发程序状态查询请求。

    b.后台接受请求,调用起exe。

    c.exe执行过程、完毕均向指定文本中写入信息。

    d.前端状态查询请求,不断读取指定文本中的状态信息,在前端进行相关展示。

    优点:

    规避请求超时问题,可以实时获取程序进程。

    缺点:

    前端需要进行定时状态轮询请求。

                              -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

  • 相关阅读:
    Java多线程初学者指南(5):join方法的使用
    Java多线程初学者指南(4):线程的生命周期
    使用Runnable接口创建线程-3
    用Thread类创建线程-2
    线程简介-1
    Struts, Namespace用法
    多线程编程
    算法实例
    java 堆与栈的区别
    Spring AOP EXPRESSION
  • 原文地址:https://www.cnblogs.com/naaoveGIS/p/5524446.html
Copyright © 2011-2022 走看看