java 调用系统方法_一种基于java技术的调用外部可执行命令的系统及方法

本发明提出一种基于JAVA技术的调用外部可执行命令的系统和方法,通过构造工具、属性设置、启动外部命令、超时判断等模块,解决执行超时和大量输出流导致的问题,提供多线程输出和超时监控机制。
摘要由CSDN通过智能技术生成

一种基于java技术的调用外部可执行命令的系统及方法

【专利说明】—种基于JAVA技术的调用外部可执行命令的系统及方法

[0001] 抟术领域:

本发明涉及计算机语言领域,具体地涉及一种调用外部命令的系统及其方法,特别是一种基于JAVA技术的调用外部可执行命令的系统及方法。

_2] 【背景技术】:

目前通用的JAVA调用外部应用系统的方案是使用JAVA内部提供的Runtime类的exec (String s)方法生成的Process类来执行外部命令,简单的获外部命令输出的标准流和错误流,此方案在正常情况下是没有问题的,但是当外部应用系统存在以下两种不正常的情况时,就会出现卡顿、延迟甚至崩溃的情况:

1)执行时间超出预期或假死;

2)执行时产生大量的输出流内容。

[0003]

【发明内容】

:

为解决上述技术问题,本发明提供一种基于JAVA技术的调用外部可执行命令的系统,包括:构造工具模块,用于初始化系统;属性设置模块,用于设置系统运行时所需的各种参数;启动外部命令模块,用于启动外部应用命令;输出模块,用于获取并输出外部命令输出的标准流和错误流;超时判断模块,用于监控外部应用命令是否超时和是否终止;结果返回模块,用于返回系统的运行结果;存储模块,用于存储系统运行中需要存储的数据。

[0004]优选地,所述属性设置模块中的属性包括有,超时时长阀值、监听超时间隔、标准/异常输出流对象、输出模式、返回值属性。

[0005]优选地,所述启动外部命令模块通过JAVA API中的Runtime类的exec方法启动外部命令。

[0006]优选地,所述输出模块通过多线程的方式输出标准流和错误流。

[0007]优选地,所述输出模块输出标准流和错误流的方式分为单行读取输出和非单行读取输出,当输出的内容较少且输出的内容需要后续调用时选用单行读取方式,当输出的内容较多时选用非单行读取方式。

[0008]优选地,所述超时判断模块在上述启动外部命令模块启动外部命令的同时开始计时,以上述属性设置模块中所述监听超时间隔为周期,循环监听上述外部命令的返回状态,如果上述外部命令的返回状态显示外部系统执行完毕或发生异常或上述外部命令的返回状态在上述属性设置模块中所述超时时长阀值的时间内没有显示上述外部命令执行完毕,则直接结束上述外部命令,并调用上述结果返回模块。

[0009]另一方面,本发明还提供一种基于JAVA技术的调用外部可执行命令的方法,包括:调用构造函数;初始化系统运行时所需的各种属性参数;启动外部应用命令;获取并输出外部命令输出的标准流和错误流;监控外部应用命令是否超时和是否终止;返回系统的运行结果。

[0010]优选地,设置系统运行时所需的各种属性参数,其中所述各种参数包括设置超时时长阀值、设置监听超时间隔、设置标准/异常输出流对象、设置输出模式、设置返回值属性。

[0011]优选地,通过JAVA API中的Runtime类的exec (String s)方法启动外部命令。

[0012]优选地,通过多线程的方式输出标准流和错误流。

[0013]优选地,获取并输出标准流和错误流的方式分为单行读取输出和非单行读取输出,当输出的内容较少且输出的内容需要后续调用时选用单行读取方式,当输出的内容较多时选用非单行读取方式。

[0014]优选地,以上述监听超时间隔为周期,循环监听外部命令的返回状态,如果上述外部命令的返回状态显示外部命令执行完毕或发生异常或在上述超时时长阀值的时间内没有显示外部命令执行完毕,则结束上述外部命令,返回运行结果。

[0015]本发明基于java技术提供了一种使用java语言调用外部可执行程序的系统和方法,并且巧妙的使用询问机制,间隔的捕获特定异常,并抛出多线程输出标准流与错误流,彻底解决了外部应用程序在被java调用产生的大量输出流而导致的程序假死问题和超出预期的执行时间问题。

[0016]【附图说明】:

图1为本发明实施方式涉及的基于JAVA技术的调用外部可执行命令的系统的结构框图;

图2为本发明实施方式涉及的基于JAVA技术的调用外部可执行命令的方法的流程图;

图3为上述超时判断模块4运行时的流程图。

[0017]【具体实施方式】:

下面根据附图所示实施方式阐述本项发明。

[0018]图1显示了本发明实施方式涉及的基于JAVA技术的调用外部可执行命令的系统的结构框图。如图1所示,上述基于JAVA技术的调用外部可执行命令的系统包括构造工具模块1、属性设置模块2、启动外部命令模块3、输出模块4、超时判断模块5、结果返回模块6、存储模块7。其中,构造工具模块I用于初始化系统,属性设置模块2用于设置系统运行时所需的各种参数数据;启动外部命令模块3用于启动外部应用命令;输出模块4用于获取外部命令输出的标准流和错误流并输出上述外部命令输出的标准流和错误流;超时判断模块5用于监控外部命令是否超时和判断上述外部命令是否终止;结果返回模块6用于返回系统的运行结果;存储模块7用于存储系统运行中需要存储的数据。

[0019]在上述属性设置模块2中,所需要设置的参数数据包括超时时长阀值、监听超时间隔、标准/异常输出流对象、输出模式、返回值属性等,在系统开始运行时,首先调用上述构造工具模块I来初始化上述属性设置模块2中的上述参数数据,例如将上述超时时长阀值默认为O、上述监听超时间隔默认为O、上述输出模式默认为单行输出及上述返回值属性默认为异常等,并把上述参数数据存储在上述存储模块7中,供其他模块调用。

[0020]上述启动外部命令模块3通过JAVA API中的Runtime类的exec (String s)方法启动外部命令,并得到Process类的实例。所述Process类的实例可以用来控制上述外部命令的进程并获得相关信息。

[0021]上述输出模块4通过上述启动外部命令模块3中得到的所述Process类的实例得到上述外部命令运行后所输出的标准流和错误流,并将上述得到的标准流和错误流存储在上述初始化的标准/异常输出流对象中,再通过上述初始化的输出模式以多线程的方式分别读取并输出所述标准流和错误流。上述初始化的输出模式默认为单行读取的输出方式(readline),也可以采用非单行读取的输出方式,当上述外部命令输出内容较少且需要时,采用单行读取输出方式,当上述外部命令输出内容较多时,则采用非单行读取输出方式。

[0022]上述超时判断模块5在上述启动外部命令模块3启动外部命令的同时开始计时,再以上述属性设置模块2中所述监听超时间隔为周期,循环监听上述外部命令的返回状态,如果上述外部命令的返回状态显示外部系统执行完毕或发生异常或上述外部命令的返回状态在上述属性设置模块中所述超时时长阀值的时间内没有显示上述外部命令执行完毕,则直接结束上述外部命令,并调用上述结果返回模块。

[0023]图2为本发明实施方式涉及的基于JAVA技术的调用外部可执行命令的方法的流程图。下面参照图2说明在本实施方式涉及的基于JAVA技术的调用外部可执行命令的处理过程。

[0024]当系统开始运行时,首先由上述构造工具模块I调用构造函数(步骤SI),并上述属性设置模块2对上述构造函数中所用的参数进行初始化(步骤S2),即当系统运行时需要对上述构造函数中所用的参数进行初始化(步骤S2)。上述参数包括有超时时长阀值、监听超时间隔、标准/异常输出流对象、输出模式、返回值属性等。例如,对上述构造函数中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值