隨筆-60  評論-35  文章-15  trackbacks-0

          由于工作中要使用Java調用4U Wma Mp3 Converter命令行將vox格式轉換成WMA格式,以方便在網頁中試聽,所以想到用java.lang.Runtime來處理這個問題。在使用過程中碰到了一些以前沒有留意的問題,整理如下:

          一 最簡單的調用方式
          String cmd="WMAMP3Converter.exe";
          java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
          總結:此方法,要求可執行文件在Tomcat的工作目錄中。一般的,程序安裝目錄都在Tomcat目錄之外,所以使用絕對路徑來替代以上方案。

          二 使用全路徑調用可執行文件
          String cmd="C:\\WMA\\WMAMP3Converter.exe";
          java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
          總結:此調用方式執行沒有問題,后來測試完成后部署到服務器上,發現問題又出來了,程序執行錯誤。分析原因,因為本地測試和服務器安裝路徑不同,服務器安裝軟件的目錄為C:\Program Files\4U Computing\WMA MP3 Converter\,這里路徑里有空格,造成空格處斷開,所以命令行無法正確截取參數。

          三 安全的全路徑方式調用執行文件
          String cmd="\"C:\\Program Files\\4U Computing\\WMA MP3 Converter\\WMAMP3Converter.exe\"";
          java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
          總結:在cmd串中,把可執行文件的全路徑用雙引號包含,就可以解決路徑、文件名中包含空格、全角字符等問題。

          程序運行一段時間以后,發現有時候程序執行完后轉換文件沒有,程序沒有錯誤,而且服務器上有很多進程沒有結束。原來調用可執行文件失敗了,但是程序不知道,以為成功了,然后繼續去找轉換后的文件來播放導致失敗。分析原因,是因為上面的方式異步的,也就是說java提交運行文件的命令以后,立即轉到播放模塊。
          解決辦法就是讓命令行同步方式執行,也就是主程序等待調用可執行文件結束以后再執行。(注:當然,播放之前檢查文件是否存在也是可以的,這里是說明同步異步的問題。)

          四 異步方式調用外部可執行文件
          Process process=null;
          String cmd="\"C:\\Program Files\\4U Computing\\WMA MP3 Converter\\WMAMP3Converter.exe\"";
          process = java.lang.Runtime.getRuntime().exec(cmd+" \""+filePath+"\" /wma");
          process.waitFor();
          總結:構造一個Process對象,將運行進程獲取過來,控制這個進程等待調用結束再繼續運行。OK。

          五 順便說一下,使用Process對象以后,可以用如下方法返回錯誤信息和輸出信息,來進一步控制進程運行。
          process.exitValue()
          process.getErrorStream()
          process.getInputStream()
          process.getOutputStream()

          posted on 2006-04-04 17:06 Q系列類、方法、變量…… 閱讀(740) 評論(0)  編輯  收藏 所屬分類: 網上工具代碼
          主站蜘蛛池模板: 永登县| 巴东县| 桃园市| 云梦县| 广水市| 中阳县| 朝阳市| 任丘市| 永丰县| 乌什县| 浠水县| 泸州市| 永仁县| 吕梁市| 且末县| 平遥县| 陕西省| 盐亭县| 定结县| 乐陵市| 松溪县| 涞源县| 开平市| 突泉县| 夏河县| 芜湖市| 青河县| 厦门市| 乌鲁木齐市| 临高县| 淳安县| 商城县| 金平| 呼和浩特市| 靖宇县| 内江市| 东乡族自治县| 香河县| 阿鲁科尔沁旗| 时尚| 馆陶县|