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

 

时间: 2024-08-18 10:49:23

使用java传参调用exe并且获取程序进度和返回结果的一种方法的相关文章

Java多线程初学者指南(8):从线程返回数据的两种方法

从线程中返回数据和向线程传递数据类似.也可以通过类成员以及回调函数来返回数据.但类成员在返回数据和传递数据时有一些区别,下面让我们来看看它们区别在哪. 一.通过类变量和方法返回数据 使用这种方法返回数据需要在调用start方法后才能通过类变量或方法得到数据.让我们先来看看例程2-13会得到什么结果. package mythread; public class MyThread extends Thread { private String value1; private String valu

.net接口地址栏传参调用调用方法

问题描述 .net接口地址栏传参调用调用方法 怎么通过url中填写的路径以及方法名和参数触发接口中对应的方法并返回结果 解决方案 最简单的 字符串拼接得到url然后 webclient.downloadstring(你的url) 解决方案二: C#.NET调用WSDL接口及方法

jquery-html中table的编辑按钮传参调用方法失败的问题

问题描述 html中table的编辑按钮传参调用方法失败的问题 在js中使用如下语句遍历创建表格,最右边带有编辑按钮,然后想传参调用某方法失败 var html6 = '<td><a href="#" rel="rs-dialog" data-toggle="modal" data-target="#myModal" onclick=setValue("'+i+'")">编

java发送url请求获取返回值的二种方法_java

下面提供二种方法会使用java发送url请求,并获取服务器返回的值 第一种方法: 复制代码 代码如下: import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFor

Java传参方式-值传递还是引用传递

参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递.写它是为了揭穿普遍存在的一种神话,即认为 Java 应用程序按引用传递参数,以避免因依赖"按引用传递"这一行为而导致的常见编程错误. 对此节选的某些反馈意见认为,我把这一问题搞糊涂了,或者将它完全搞错了.许多不同意我的读者用 C++ 语言作为例子.因此,在此栏目中我将使用 C++ 和 Java 应用程序进一步阐明一些事实. 要点 读完所有的评论以后,问题终于明白了,考试吧提示: 至少在一个主要问

java 传参 编程-【Java初学者求助】,谢谢main方法里面传参的问题

问题描述 [Java初学者求助],谢谢main方法里面传参的问题 刚开始接触Java时间不久,谢谢各位帮忙.我想要得到的结果是:输入身高和体重,然后算出来exp是否合理,谢谢,package forth; import java.io.*; public class Person { float weight; float height; String check(){ float exp = weight/(height*height); if(exp<18) return ""

js jquery获取随机生成id的服务器控件的3种方法

由于ASP.NET网页运行后,服务器控件会随机生成客户端id,jquery获取时候不太好操作,google了下,总结有以下3种方法: 服务器控件代码:<asp:TextBox ID="txtUserID" runat="server"></asp:TextBox> 1. $("#<%=txtUserID.ClientID%>").val(); 2. $("input[id*=txtUserID]&qu

js jquery获取随机生成id的服务器控件的三种方法_jquery

由于ASP.NET网页运行后,服务器控件会随机生成客户端id,jquery获取时候不太好操作,google了下,总结有以下3种方法: 服务器控件代码:<asp:TextBox ID="txtUserID" runat="server"></asp:TextBox> 1. $("#<%=txtUserID.ClientID%>").val(); 2. $("input[id*=txtUserID]&qu

java 传参的时候,有常量引用吗

问题描述 c++里可以成const&st,防止引用参数被修改,在java里应该怎么写? 解决方案 解决方案二:你是指函数参数为常量吗?如果是,用finalpublicvoidtest(finalinta){}解决方案三:Java传递参数,如果是intString,不加final也没事.解决方案四:引用1楼enzo1986的回复: 你是指函数参数为常量吗?如果是,用finalpublicvoidtest(finalinta){} 你好.publicstaticvoidchange(finalnin