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

本文档详细介绍了如何在Java中通过Runtime.exec()方法调用C#生成的exe程序,并处理参数传递问题。在使用eclipse+tomcat搭建的web server中,创建定时任务执行本地exe时,遇到exe工作路径不正确的问题。解决方案是根据exe的实际工作目录,将参数文件放置在相应位置,确保程序能找到所需文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Java代码调用exe

1使用场景

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

2Java代码

      

public class MyTask extends TimerTask {

  public void run() {
     System.out.println("call at " + (new Date()));
    // TODO æ­¤å¤„æ·»åŠ å…·ä½“ä»»åŠ¡ä»£ç  
     try {
         String cmdStr1="D:/download/SvmGridParameterTraining/SvmGridParameterTraining/EasySvmTrain/bin/Debug/EasySvmTrain newtrain.txt newtest.txt";
        
         
         Runtime.getRuntime().exec("cmd.exe /c start "+cmdStr1);
     }catch(Exception e){
         e.printStackTrace();
     }
  }

}


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


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


3陷阱:exe工作路径


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


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

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

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


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


4解决方式 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值