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

  • 相关阅读:
    前向传播与反向传播
    卷积运算
    使用GUI工具Portainer.io管控Docker容器
    NextCloud: 打造自己的网盘
    金融危机和经济危机有什么不同
    【转载】Windows环境的Workflow神器:AutoHotkey
    Lua常用模块
    Lua基本语法
    区分 IaaS、SaaS 和 PaaS
    【笔记】流畅的Python
  • 原文地址:https://www.cnblogs.com/naaoveGIS/p/5524446.html
Copyright © 2020-2023  润新知