亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于java技術(shù)的調(diào)用外部可執(zhí)行命令的系統(tǒng)及方法

文檔序號(hào):8922450閱讀:541來源:國知局
一種基于java技術(shù)的調(diào)用外部可執(zhí)行命令的系統(tǒng)及方法
【專利說明】—種基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的系統(tǒng)及方法
[0001] 摶術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)語言領(lǐng)域,具體地涉及一種調(diào)用外部命令的系統(tǒng)及其方法,特別是一種基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的系統(tǒng)及方法。
_2] 【背景技術(shù)】:
目前通用的JAVA調(diào)用外部應(yīng)用系統(tǒng)的方案是使用JAVA內(nèi)部提供的Runtime類的exec (String s)方法生成的Process類來執(zhí)行外部命令,簡(jiǎn)單的獲外部命令輸出的標(biāo)準(zhǔn)流和錯(cuò)誤流,此方案在正常情況下是沒有問題的,但是當(dāng)外部應(yīng)用系統(tǒng)存在以下兩種不正常的情況時(shí),就會(huì)出現(xiàn)卡頓、延遲甚至崩潰的情況:
1)執(zhí)行時(shí)間超出預(yù)期或假死;
2)執(zhí)行時(shí)產(chǎn)生大量的輸出流內(nèi)容。
[0003]
【發(fā)明內(nèi)容】
:
為解決上述技術(shù)問題,本發(fā)明提供一種基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的系統(tǒng),包括:構(gòu)造工具模塊,用于初始化系統(tǒng);屬性設(shè)置模塊,用于設(shè)置系統(tǒng)運(yùn)行時(shí)所需的各種參數(shù);啟動(dòng)外部命令模塊,用于啟動(dòng)外部應(yīng)用命令;輸出模塊,用于獲取并輸出外部命令輸出的標(biāo)準(zhǔn)流和錯(cuò)誤流;超時(shí)判斷模塊,用于監(jiān)控外部應(yīng)用命令是否超時(shí)和是否終止;結(jié)果返回模塊,用于返回系統(tǒng)的運(yùn)行結(jié)果;存儲(chǔ)模塊,用于存儲(chǔ)系統(tǒng)運(yùn)行中需要存儲(chǔ)的數(shù)據(jù)。
[0004]優(yōu)選地,所述屬性設(shè)置模塊中的屬性包括有,超時(shí)時(shí)長(zhǎng)閥值、監(jiān)聽超時(shí)間隔、標(biāo)準(zhǔn)/異常輸出流對(duì)象、輸出模式、返回值屬性。
[0005]優(yōu)選地,所述啟動(dòng)外部命令模塊通過JAVA API中的Runtime類的exec方法啟動(dòng)外部命令。
[0006]優(yōu)選地,所述輸出模塊通過多線程的方式輸出標(biāo)準(zhǔn)流和錯(cuò)誤流。
[0007]優(yōu)選地,所述輸出模塊輸出標(biāo)準(zhǔn)流和錯(cuò)誤流的方式分為單行讀取輸出和非單行讀取輸出,當(dāng)輸出的內(nèi)容較少且輸出的內(nèi)容需要后續(xù)調(diào)用時(shí)選用單行讀取方式,當(dāng)輸出的內(nèi)容較多時(shí)選用非單行讀取方式。
[0008]優(yōu)選地,所述超時(shí)判斷模塊在上述啟動(dòng)外部命令模塊啟動(dòng)外部命令的同時(shí)開始計(jì)時(shí),以上述屬性設(shè)置模塊中所述監(jiān)聽超時(shí)間隔為周期,循環(huán)監(jiān)聽上述外部命令的返回狀態(tài),如果上述外部命令的返回狀態(tài)顯示外部系統(tǒng)執(zhí)行完畢或發(fā)生異?;蛏鲜鐾獠棵畹姆祷貭顟B(tài)在上述屬性設(shè)置模塊中所述超時(shí)時(shí)長(zhǎng)閥值的時(shí)間內(nèi)沒有顯示上述外部命令執(zhí)行完畢,則直接結(jié)束上述外部命令,并調(diào)用上述結(jié)果返回模塊。
[0009]另一方面,本發(fā)明還提供一種基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的方法,包括:調(diào)用構(gòu)造函數(shù);初始化系統(tǒng)運(yùn)行時(shí)所需的各種屬性參數(shù);啟動(dòng)外部應(yīng)用命令;獲取并輸出外部命令輸出的標(biāo)準(zhǔn)流和錯(cuò)誤流;監(jiān)控外部應(yīng)用命令是否超時(shí)和是否終止;返回系統(tǒng)的運(yùn)行結(jié)果。
[0010]優(yōu)選地,設(shè)置系統(tǒng)運(yùn)行時(shí)所需的各種屬性參數(shù),其中所述各種參數(shù)包括設(shè)置超時(shí)時(shí)長(zhǎng)閥值、設(shè)置監(jiān)聽超時(shí)間隔、設(shè)置標(biāo)準(zhǔn)/異常輸出流對(duì)象、設(shè)置輸出模式、設(shè)置返回值屬性。
[0011]優(yōu)選地,通過JAVA API中的Runtime類的exec (String s)方法啟動(dòng)外部命令。
[0012]優(yōu)選地,通過多線程的方式輸出標(biāo)準(zhǔn)流和錯(cuò)誤流。
[0013]優(yōu)選地,獲取并輸出標(biāo)準(zhǔn)流和錯(cuò)誤流的方式分為單行讀取輸出和非單行讀取輸出,當(dāng)輸出的內(nèi)容較少且輸出的內(nèi)容需要后續(xù)調(diào)用時(shí)選用單行讀取方式,當(dāng)輸出的內(nèi)容較多時(shí)選用非單行讀取方式。
[0014]優(yōu)選地,以上述監(jiān)聽超時(shí)間隔為周期,循環(huán)監(jiān)聽外部命令的返回狀態(tài),如果上述外部命令的返回狀態(tài)顯示外部命令執(zhí)行完畢或發(fā)生異?;蛟谏鲜龀瑫r(shí)時(shí)長(zhǎng)閥值的時(shí)間內(nèi)沒有顯示外部命令執(zhí)行完畢,則結(jié)束上述外部命令,返回運(yùn)行結(jié)果。
[0015]本發(fā)明基于java技術(shù)提供了一種使用java語言調(diào)用外部可執(zhí)行程序的系統(tǒng)和方法,并且巧妙的使用詢問機(jī)制,間隔的捕獲特定異常,并拋出多線程輸出標(biāo)準(zhǔn)流與錯(cuò)誤流,徹底解決了外部應(yīng)用程序在被java調(diào)用產(chǎn)生的大量輸出流而導(dǎo)致的程序假死問題和超出預(yù)期的執(zhí)行時(shí)間問題。
[0016]【附圖說明】:
圖1為本發(fā)明實(shí)施方式涉及的基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的系統(tǒng)的結(jié)構(gòu)框圖;
圖2為本發(fā)明實(shí)施方式涉及的基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的方法的流程圖;
圖3為上述超時(shí)判斷模塊4運(yùn)行時(shí)的流程圖。
[0017]【具體實(shí)施方式】:
下面根據(jù)附圖所示實(shí)施方式闡述本項(xiàng)發(fā)明。
[0018]圖1顯示了本發(fā)明實(shí)施方式涉及的基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的系統(tǒng)的結(jié)構(gòu)框圖。如圖1所示,上述基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的系統(tǒng)包括構(gòu)造工具模塊1、屬性設(shè)置模塊2、啟動(dòng)外部命令模塊3、輸出模塊4、超時(shí)判斷模塊5、結(jié)果返回模塊6、存儲(chǔ)模塊7。其中,構(gòu)造工具模塊I用于初始化系統(tǒng),屬性設(shè)置模塊2用于設(shè)置系統(tǒng)運(yùn)行時(shí)所需的各種參數(shù)數(shù)據(jù);啟動(dòng)外部命令模塊3用于啟動(dòng)外部應(yīng)用命令;輸出模塊4用于獲取外部命令輸出的標(biāo)準(zhǔn)流和錯(cuò)誤流并輸出上述外部命令輸出的標(biāo)準(zhǔn)流和錯(cuò)誤流;超時(shí)判斷模塊5用于監(jiān)控外部命令是否超時(shí)和判斷上述外部命令是否終止;結(jié)果返回模塊6用于返回系統(tǒng)的運(yùn)行結(jié)果;存儲(chǔ)模塊7用于存儲(chǔ)系統(tǒng)運(yùn)行中需要存儲(chǔ)的數(shù)據(jù)。
[0019]在上述屬性設(shè)置模塊2中,所需要設(shè)置的參數(shù)數(shù)據(jù)包括超時(shí)時(shí)長(zhǎng)閥值、監(jiān)聽超時(shí)間隔、標(biāo)準(zhǔn)/異常輸出流對(duì)象、輸出模式、返回值屬性等,在系統(tǒng)開始運(yùn)行時(shí),首先調(diào)用上述構(gòu)造工具模塊I來初始化上述屬性設(shè)置模塊2中的上述參數(shù)數(shù)據(jù),例如將上述超時(shí)時(shí)長(zhǎng)閥值默認(rèn)為O、上述監(jiān)聽超時(shí)間隔默認(rèn)為O、上述輸出模式默認(rèn)為單行輸出及上述返回值屬性默認(rèn)為異常等,并把上述參數(shù)數(shù)據(jù)存儲(chǔ)在上述存儲(chǔ)模塊7中,供其他模塊調(diào)用。
[0020]上述啟動(dòng)外部命令模塊3通過JAVA API中的Runtime類的exec (String s)方法啟動(dòng)外部命令,并得到Process類的實(shí)例。所述Process類的實(shí)例可以用來控制上述外部命令的進(jìn)程并獲得相關(guān)信息。
[0021]上述輸出模塊4通過上述啟動(dòng)外部命令模塊3中得到的所述Process類的實(shí)例得到上述外部命令運(yùn)行后所輸出的標(biāo)準(zhǔn)流和錯(cuò)誤流,并將上述得到的標(biāo)準(zhǔn)流和錯(cuò)誤流存儲(chǔ)在上述初始化的標(biāo)準(zhǔn)/異常輸出流對(duì)象中,再通過上述初始化的輸出模式以多線程的方式分別讀取并輸出所述標(biāo)準(zhǔn)流和錯(cuò)誤流。上述初始化的輸出模式默認(rèn)為單行讀取的輸出方式(readline),也可以采用非單行讀取的輸出方式,當(dāng)上述外部命令輸出內(nèi)容較少且需要時(shí),采用單行讀取輸出方式,當(dāng)上述外部命令輸出內(nèi)容較多時(shí),則采用非單行讀取輸出方式。
[0022]上述超時(shí)判斷模塊5在上述啟動(dòng)外部命令模塊3啟動(dòng)外部命令的同時(shí)開始計(jì)時(shí),再以上述屬性設(shè)置模塊2中所述監(jiān)聽超時(shí)間隔為周期,循環(huán)監(jiān)聽上述外部命令的返回狀態(tài),如果上述外部命令的返回狀態(tài)顯示外部系統(tǒng)執(zhí)行完畢或發(fā)生異?;蛏鲜鐾獠棵畹姆祷貭顟B(tài)在上述屬性設(shè)置模塊中所述超時(shí)時(shí)長(zhǎng)閥值的時(shí)間內(nèi)沒有顯示上述外部命令執(zhí)行完畢,則直接結(jié)束上述外部命令,并調(diào)用上述結(jié)果返回模塊。
[0023]圖2為本發(fā)明實(shí)施方式涉及的基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的方法的流程圖。下面參照?qǐng)D2說明在本實(shí)施方式涉及的基于JAVA技術(shù)的調(diào)用外部可執(zhí)行命令的處理過程。
[0024]當(dāng)系統(tǒng)開始運(yùn)行時(shí),首先由上述構(gòu)造工具模塊I調(diào)用構(gòu)造函數(shù)(步驟SI),并上述屬性設(shè)置模塊2對(duì)上述構(gòu)造函數(shù)中所用的參數(shù)進(jìn)行初始化(步驟S2),即當(dāng)系統(tǒng)運(yùn)行時(shí)需要對(duì)上述構(gòu)造函數(shù)中所用的參數(shù)進(jìn)行初始化(步驟S2)。上述參數(shù)包括有超時(shí)時(shí)長(zhǎng)閥值、監(jiān)聽超時(shí)間隔、標(biāo)準(zhǔn)/異常輸出流對(duì)象、輸出模式、返回值屬性等。例如,對(duì)上述構(gòu)造函數(shù)中
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1