Solved

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

Posted on 2003-10-26
11
714 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
  • 3
11 Comments
 
LVL 2

Accepted Solution

by:
f_98 earned 70 total points
ID: 9624670
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
ID: 9625996
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
ID: 9626241
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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 24

Expert Comment

by:sciuriware
ID: 9626398
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
ID: 9626410
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
 

Author Comment

by:John_Nash442
ID: 9626879
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
ID: 9626946
try "start java c:\rmi\ProductServer" from the command line
0
 

Author Comment

by:John_Nash442
ID: 9627037
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
ID: 9627114
please post the error that it gives now. (the details or stack trace)
0
 

Author Comment

by:John_Nash442
ID: 9627430
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
ID: 9627435
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

Salesforce Has Never Been Easier

Improve and reinforce salesforce training & adoption using WalkMe's digital adoption platform. Start saving on costly employee training by creating fast intuitive Walk-Thrus for Salesforce. Claim your Free Account Now

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
servlet example 11 76
SHA2 certs for IIS AND Java? 2 136
How do I remove an object from a 3 62
java mysql insert application 14 68
After being asked a question last year, I went into one of my moods where I did some research and code just for the fun and learning of it all.  Subsequently, from this journey, I put together this article on "Range Searching Using Visual Basic.NET …
Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Viewers learn about the “while” loop and how to utilize it correctly in Java. Additionally, viewers begin exploring how to include conditional statements within a while loop and avoid an endless loop. Define While Loop: Basic Example: Explanatio…
Video by: Michael
Viewers learn about how to reduce the potential repetitiveness of coding in main by developing methods to perform specific tasks for their program. Additionally, objects are introduced for the purpose of learning how to call methods in Java. Define …
Suggested Courses

739 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