使用java传参调用exe并且获取程序进度和返回结果的一种方法
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.前端状态查询请求,不断读取指定文本中的状态信息,在前端进行相关展示。
优点:
规避请求超时问题,可以实时获取程序进程。
缺点:
前端需要进行定时状态轮询请求。