• 使用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/

  • 相关阅读:
    .net面试--值类型和引用类型
    Centos7下安装Docker(详细的新手装逼教程)
    C# 开源框架(整理)
    service配置文件
    kafka消息队列、环境搭建与使用(.net framework)
    消息队列
    并发、并行、同步、异步、多线程的区别
    破解studio 3T
    HM后台(二)
    HM后台(一)
  • 原文地址:https://www.cnblogs.com/naaoveGIS/p/5524446.html
Copyright © 2020-2023  润新知