aspose file tools*
The moose likes Beginning Java and the fly likes runtime.exec problems Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "runtime.exec problems" Watch "runtime.exec problems" New topic
Author

runtime.exec problems

Gamaliel Isaac
Greenhorn

Joined: Jun 25, 2011
Posts: 6
I can't get runtime.exec to execute a program in Java. I am trying to execute a bat file. I read that in order to run bat files as opposed to .exe files the runtime command has to include "cmd /c start" before the name of the bat file. I have run bat files successfully this way before.

The command that I am running works when typed from the command line. It is:

z:/n4/pkg/MrServers/MrVista/Simu/StartSimEnv.bat -AutoStart GOLD_256x512.dat

When I try the following code:

File file = new File(imageDir);
cmd = "C:\WINDOWS\system32\cmd /c start "+simDir+"StartSimEnv.bat -AutoStart " + imageName;

IJ.log("cmd = " + cmd);

Runtime runtime = Runtime.getRuntime();

try{
Process proc = runtime.exec(cmd,null,file);
}
catch(Exception e)
{
IJ.log(e.toString());
}

StartSimEnv.bat file gives a message about the usage being wrong as if I'm giving the wrong parameters. If I delete imageName from the cmd string it doesn't complain about usage but doesn't do the task I want it to do.

I tried putting the parameters in an array as follows:


File file = new File(imageDir);
String[] cmdArray = {cmdPath, "/c", "start",simDir+"StartSimEnv.bat","-AutoStart",imageName};

IJ.log("cmdArray = " + cmdArray[0] + " " + cmdArray[1] + " " + cmdArray[2] + " " + cmdArray[3] + " " + cmdArray[4] + " " + cmdArray[5]);
Runtime runtime = Runtime.getRuntime();

try{
Process proc = runtime.exec(cmdArray,null,file);
}
catch(Exception e)
{
IJ.log(e.toString());
}

I still get a message about usage.
I have made efforts with process builder also but can't get that to work either. Does anyone have any ideas why this isn't working?

Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 42637
    
  65
Runtime.exec isn't easy to get right; read this article to understand the issues.


Ping & DNS - my free Android networking tools app
Gamaliel Isaac
Greenhorn

Joined: Jun 25, 2011
Posts: 6
Ulf I read that article already but it didn't help. Thanks anyway.
Ulf Dittmer
Marshal

Joined: Mar 22, 2005
Posts: 42637
    
  65
Well, since you didn't tell us the error message you got, there's not much we can do to help.

One of things that article teaches is that you should definitely be using the method that takes a String[], instead of the one that takes a String parameter, so the second approach is to be preferred.
Gamaliel Isaac
Greenhorn

Joined: Jun 25, 2011
Posts: 6
The only message I got was regarding usage and I know my usage is correct because it works on the command line.


DEBUG_MODE=d|' ' (current: )

Usage: StartSimEnv [-h [env] -D -T -d -config -close [forced] -outFil -remote -A
utoStart -w <sec> -noPause -rd]
Henry Wong
author
Sheriff

Joined: Sep 28, 2004
Posts: 18997
    
  40

Gamaliel Isaac wrote: I know my usage is correct because it works on the command line.


That is a very bad assumption to make -- especially since the executable is telling you that the usage is wrong. Even different command shells behave differently with user input from the command line.

I would recommend modifying the batch file to print out what it will run before it actually run it (adding a single echo should do it). This way you can see the differences in how the executable is being run from the batch file in both cases.

Henry


Books: Java Threads, 3rd Edition, Jini in a Nutshell, and Java Gems (contributor)
Gamaliel Isaac
Greenhorn

Joined: Jun 25, 2011
Posts: 6
Henry, I commented out echo off in the bat file and still got the same error message without more text. It's possible that the reason for that is that the bat file is calling another file. The file is complicated and hard to understand.

I did try something else I called the bat file with all it's parameters inside another bat file and then called that bat file from runtime.exec() That is working now. To use this approach I will have to use java to create a bat file each time containing the parameters I want.

Even though this is working I am very confused about this.
James Sabre
Ranch Hand

Joined: Sep 07, 2004
Posts: 781

Gamaliel Isaac wrote:
Even though this is working I am very confused about this.


Gamaliel Isaac wrote:Ulf I read that article already but it didn't help. Thanks anyway.


There is nothing in the code you have published to indicate that you have read the 'traps' article. You certainly do not seem to have implemented most of the recommendations.


Retired horse trader.
 Note: double-underline links may be advertisements automatically added by this site and are probably not endorsed by me.
Gamaliel Isaac
Greenhorn

Joined: Jun 25, 2011
Posts: 6
I did look at it and I didn't test all its recommendations because I didn't think they would help but I'll take another look
James Sabre
Ranch Hand

Joined: Sep 07, 2004
Posts: 781

Gamaliel Isaac wrote:I did look at it and I didn't test all its recommendations because I didn't think they would help but I'll take another look


Big mistake on your part. Implementing the recommendations may not make any difference but without them your code is highly suspect. The diagnostic information they provide may tell you exactly what the problem is.
Gamaliel Isaac
Greenhorn

Joined: Jun 25, 2011
Posts: 6
It was a big mistake on my part. I used the method described in the article and it worked.
James Sabre
Ranch Hand

Joined: Sep 07, 2004
Posts: 781

Gamaliel Isaac wrote:It was a big mistake on my part. I used the method described in the article and it worked.


I'm pleased you sorted it.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: runtime.exec problems