首页 > Java开发 > 使用java代码调用exe程序 (包括参数传递)

使用java代码调用exe程序 (包括参数传递)

使用Java代码调用exe

1使用场景

      我现在使用eclipse+tomcat的架构建立了web server, 在这个web project中我需要建立一个定时任务,在定时任务中执行本地的一个C#工程生成的exe。

2Java代码

  1. public class MyTask extends TimerTask {  
  2.   
  3.   public void run() {  
  4.      System.out.println("call at " + (new Date()));  
  5.     // TODO æ­¤å¤„添加具体任务代砠  
  6.      try {  
  7.          String cmdStr1="D:/download/SvmGridParameterTraining/SvmGridParameterTraining/EasySvmTrain/bin/Debug/EasySvmTrain newtrain.txt newtest.txt";  
  8.           
  9.            
  10.          Runtime.getRuntime().exec("cmd.exe /c start "+cmdStr1);  
  11.      }catch(Exception e){  
  12.          e.printStackTrace();  
  13.      }  
  14.   }  
  15.   
  16. }  

getRuntime().exec()中的参数包括exe文件全路径和参数 (我后面的两个txt参数直接写在后面即可)

/c 的意思是执行之后关闭命令行。

3陷阱:exe工作路径

按以上代码执行后,发现程序并没有按预期执行。 经过测试发现 作为参数的newtrain.txt 和newtest.txt 为空。 所以我分析在程序的执行路径下并没有这两个文件

在调用的C#程序中加入如下代码:

  1. Headache 2014/8/29 13:28:11  
  2.  Console.WriteLine("Environment.CurrentDirectory:" + Environment.CurrentDirectory);  
  3.  Console.WriteLine("Directory.GetCurrentDirectory():" + Directory.GetCurrentDirectory());  
  4.  String input2 = Console.ReadLine();  

 

打印出项目的工作目录,可以发现。在单独调用C#工程时,工作目录为C#的工程目录,而使用tomcat +eclipse 做定时任务时, 打印出的目录是tomcat的目录。

因为源程序需要使用的newtrain和newtest文件都在C#目录下, 所以通过java调用时传进去的newtrain 和 newtest这两个参数实际上是没什么意义的(tomcat下并没有这两个文件)

4解决方式

根据打印出的当前工作目录, 把参数文件放到相应的目录下。


本文固定链接: http://www.devba.com/index.php/archives/5911.html | 开发吧

报歉!评论已关闭.