教你如何在java程序中调用本地应用程序

关键字: 企业应用   jni    

本人在项目中遇到这样一个问题,要使用java来调用本地应用程序执行某些操作,例如执行isql命令,来kill掉数据库中的某些进程,这些是数据库本身的命令,很多jdbc根本不支持这些命令,所以不得不使用调用本地应用程序来执行这些命令。
java 中Runtime类是可以调用本地应用程序的可以通过Runtime.getRuntime()来得到Runtime实例,然后执行exec方法来调用本地应用程序,Runtime类中有很多exec方法,参数不同,但是最后都会调用exec(String[] cmdarray, String[] envp, File dir) 这个方法,
其中cmdarray是要执行的本地命令集合,envp是环境变量,dir是exec返回的Process的工作目录。
比较容易出错的地方是环境变量的设置,如果envp is null,那么它会集成它的父进程的环境变量,如果不知道怎么设环境变量,这通常是一个好的选择,如果环境变量设置不当很有可能找不到dll或其他东西而是本地应用程序执行失败,一般会报这样的异常
> java.io.IOException: CreateProcess: yourcmd error=2
> at java.lang.Win32Process.create(Native Method)
> at
> java.lang.Win32Process.<init>(Win32Process.java:63)
> at java.lang.Runtime.execInternal(Native Method)
> at java.lang.Runtime.exec(Runtime.java:566)
> at java.lang.Runtime.exec(Runtime.java:428)
> at java.lang.Runtime.exec(Runtime.java:364)
> at java.lang.Runtime.exec(Runtime.java:326)
error =2表示filenotfound

代码
  1. public void testProcess()   
  2.    {   
  3.        try  
  4.        {   
  5.            String home="e:/process";   
  6.         String command = "D:/Sybase/bin/isql -Uuser -Pyourpwd  -SserverName -iisql.sql";   
  7.         File dir = new File(home);   
  8.            
  9.         Process p = Runtime.getRuntime().exec(command, null, dir);   
  10.            
  11.         StringBuffer strOutput = new StringBuffer();   
  12.         BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));   
  13.         String strProc;   
  14.         while((strProc = in.readLine()) != null)   
  15.         {   
  16.             strOutput.append(strProc+"\n");   
  17.         }   
  18.            
  19.         logger.debug("output is "+strOutput.toString());   
  20.        }   
  21.        catch(IOException e)   
  22.        {   
  23.            logger.warn("IOException ", e);   
  24.        }   
  25.    }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值