Solved

Using Runtime.exec() to call a Java class with arguments

Posted on 2003-10-26
11
691 Views
Last Modified: 2008-02-01
I need to independantly run a Java class (with arguments) from a current running Java class using Runtime.exec().
 
I can use the Runtime.exec() with 100% success when calling .exe programs (e.g. Runtime.exec("start rmiregistry.exe")) but when wanting to start another java program with arguments (e.g. Runtime.exec("java -Djava.security.policy=client.policy ProductClient")) or even without arguments (e.g. Runtime.exec("start java ProductServer")), it will not work.
 
I am also unsure on how to call another class from a different directory than the working one? e.g. using something along the lines of Runtime.exec("c:\rmi\start java ProductServer") when the java program calling that was run from c:\rmi\client)
 
 
Any advice or knowledge would be greatly appreciated!!
0
Comment
Question by:John_Nash442
  • 4
  • 4
  • 3
11 Comments
 
LVL 2

Accepted Solution

by:
f_98 earned 70 total points
Comment Utility
you could try writing a batch file (or shell script) that sets up everything (arguments, directories) and then call that
batch file in runtime exec.
0
 
LVL 24

Expert Comment

by:sciuriware
Comment Utility
Runtime.exec("<full path to>java ProductServer");    MUST work!
You might also expand PATH with the path to all JAVA binaries, like javaw, javadoc ...
;JOOP!
0
 

Author Comment

by:John_Nash442
Comment Utility
When using the line

Runtime.exec("c:\\rmi\\client\\server\\start java ProductServer");

It will compile but when running it i get the error message,

Error: java.io.IOException: CreateProcess: c:\rmi\client\server\start java ProductServer error=2

If this helps?
0
 
LVL 24

Expert Comment

by:sciuriware
Comment Utility
Type that same command in an MSDOS-box, see what happens.
(single \'s of course)

Did you try something like (valid on my computer):
E:\J2SDK1.4.2\BINjavaw -jar E:\j2sdk1.4.2\demo\jfc\SwingSet2\SwingSet2.jar
(depends on where your JDK is installed)
It runs a SWING-demo; if you can start that from an MSDOS-box,
try to Runtime.exec() it,
then apply your own program class name.
(step by step)
;JOOP!
0
 
LVL 24

Expert Comment

by:sciuriware
Comment Utility
I think that your original command could work like:

Runtime.exec("c:/rmi/client/server/start   E:/J2SDK1.4.2/BIN/javaw   ProductServer");

(there was a missing \\ before BIN, then again: do not use \\ in your JAVA program:
   JAVA understands / very well.)
;JOOP!
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 

Author Comment

by:John_Nash442
Comment Utility
sciuriware, i've tried your suggestions but i still get the same error (the one I wrote up before).

When I write a batch file (something I don't have much experience in but I thought was pretty straight forward) it doesn't seem to recognise anything after the fisrt word, i.e. writing "c:\rmi\start java ProductServer" returns an error saying could not find "c:\rmi\start".
0
 
LVL 2

Expert Comment

by:f_98
Comment Utility
try "start java c:\rmi\ProductServer" from the command line
0
 

Author Comment

by:John_Nash442
Comment Utility
Okay sorry, I got my batch file running at the command line but Runtime.exec gives the same IOException error as I wrote up before.
0
 
LVL 2

Expert Comment

by:f_98
Comment Utility
please post the error that it gives now. (the details or stack trace)
0
 

Author Comment

by:John_Nash442
Comment Utility
Thanks for your help guys.

The Batch file was what I needed, just didn't know how to run one using runtime.exec().

For reference to anyone else looking at this:

( calling java classes in java using runtime.exec )

create a Batch file (just open up notepad, type in the lines and save it as a '.bat') with all your commands in them, mine looked like this:

cd\rmi\client\server
start rmiregistry
start java ProductServer
cd\rmi\client
start java ProductClient


For some reason I needed to have start in front of my java when trying to call another class. Don't know why but it works like this and makes no difference (to my purposes anyway).

Then I ran the batch file in my java program by using this code:

String[] cmd {"cmd", "/c", "nameOfBatFile.bat"};
Runtime rt = getRuntime();
Process p = rt.exec(cmd);
p.waitFor();

And it has called my Batch file.

This is all testing data for my real program so there may be some unforseen problems when implementing it. I'll post if i find anything. Hopefully this helps some people out because I found it hard to find straight forward information on this on the net.


0
 
LVL 24

Expert Comment

by:sciuriware
Comment Utility
Why did you first try : c:/rmi/client/server/start
and later                   c:\rmi\start

then:  MSDOS wants to see \ \ \ \
JAVA does not care if you use ///// or \\\\\\
but do not type //// to MSDOS.

And: did you verify that the files you are using do really exist on that place?

My program would be like this:

   String path = "<path to a program>";
   File f = new File(path);
   if(f.exists)
   {
      Runtime.exec(path + " <arguments>");
   }
   else
   {
      System.err.println("The file \"" + path + "\" does not exist.");
   }

;JOOP!
 
0

Featured Post

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now