Runtime.exec() problem with Linux

Hi All,
I have a java program which I am using to launch java programs on all platforms.
I am using the Runtime.exec() method to start the process in a separate JVM.
But, I had a problem with the -classpath switch if the directories contained spaces. So I modified the java command which I am passing to the exec() method to something like:
java -classpath \"./my dir with spaces\" com.harshal.MainThis I had to do because of the problem in windows. But, if I use double quotes in Linux (for the classpath switch in my exec() method), it won't work.
Can anyone correct me so that I can use the Runtime.exec() method on all platforms to launch the java application even if the classpath directories contains spaces.
Thank you very much.

I was reading about the command line args on java's
tutorial and I found a shocking news. Mac OS doesn't
support command line args, That's news to me. Could you please elaborate ?
More important is: I got it working. I figured out I had forgotten to try something before, or, to be more correct, I made an error when trying malcommc's envp suggestion: I used "classpath" as key, not "CLASSPATH", as it should have been.
Ran a new test, got it working.
Sample:
Given a rootdir. Subdirectory "cp test" with a classfile (named "test") without package declaration. Running another class in another directory, using:
String[] cmd = new String[]{
    "java", "test"
String[] envp = new String[]{
    "CLASSPATH=rootdir:rootdir/cp test" // <-- without quotes.
Runtime.getRuntime().exec(cmd, envp);It's been my wrong all the time. I didn't check hard enough. It simply had to work somehow (that's the kind of things that's easy to say afterwards :-)).

Similar Messages

  • Runtime exec problem with command "start"

    L.S,
    I'm working on a webservice client for uploading
    and downloading files. When a file is downloaded, it
    should be opened by the appropriate application. I
    know that this is -in theory- possible by issuing a
    start command through Runtime.getRuntime.exec():
    public void doSomething(String realName, DataHandler handler) {
      File outFile = new File(realName);
      FileOutputStream out = new FileOutputStream(outFile);
      handler.writeTo(out);
      out.close();
      String fileName = outFile.getAbsolutePath();
      Process p = Runtime.getRuntime().exec("start " + fileName);
    }Running this on my Win2000 system with J2RE 1.4.2 consistently
    fails with this message:
    java.io.IOException: CreateProcess: start C:\tmp\test.pdf error=2When I issue the exact same command from a DOS shell, Adobe
    starts up with the test document loaded. I now believe that my own
    application is somehow 'holding on to' the file, preventing an
    external application like Adobe from consuming the same file.
    Does anyone know how I can get around a problem like this? How do
    I start the appropriate application and feed it the file that was
    just downloaded by the user?

    I did a search for Runtime.exec and found some good help in this forum. Someone posted something like the following and it works pretty well.
    <<begin code>
    // Determine proper shell command (extend per OS)
    String os_name = System.getProperty("os.name");
    String shellParam "";
    if (os_name.startsWith("Windows"))
    if ( (System.getProperty("os.name").endsWith("NT")) ||
    (System.getProperty("os.name").endsWith("2000")) ||
    (System.getProperty("os.name").endsWith("XP")) )
    shell = "cmd.exe";
    } else
    shell = "command.com";
    shellParam = "/C";
    // Create a string with your program executable
    String command = "myprogram.exe";
    // Create an array of each command, I found that placing "cmd.exe /c"
    // in the same string doesn't work.
    String[] cmd_array = new String[] {
    shell,
    shellParam,
    command
    Runtime.getRuntime().exec( cmd_array );
    <<end code>>
    Do a java API search for Runtime.exec (if you use Eclipse right click and hit Open Declaration) there are ways to invoke exec that support setting of the environment as well as the current directory.

  • Runtime.getRuntime().exec problem with linux script.

    Hello,
    I try to start a script under Linux RedHat 9. This script must just create another file.
    I work with JDK 1.4.1_02b06.
    If I use the next command
    process = Runtime.getRuntime().exec("/temp/myScript.sh");
    This is not working. I script file is existing otherwise I receive an error. I don't understand why the script is not executed!
    I have check some other posts in this forum but I cannot find the solution.
    Thanks in advance for your help.
    Alain.

    Try running it with sh: Runtime.getRuntime().exec("sh /temp/myScript.sh");

  • Runtime.exec Problem with setting environment

    Hello
    I will run a command with a new process environment. As example I take "ls". If I use the "exec(String)" method it works fine (like it should; my PATH is ...:/usr/bin:...).
    Next when I use "exec(String cmd, String[] env)" with cmd = ls and env = {PATH=} then the programm also prints out the listing of the current directory. In my opinion this shoudn't work.
    I have the problem using jdk1.2.2 (Solaris VM (build olaris_JDK_1.2.2_10, native threads, sunwjit)) on Solaris 8.
    As I understand the exec the method should work like this:
    1. fork a new Process
    2 set environment for the new process
    3 exec the new Programm in this process
    Is this statement right?
    On Solaris 2.6 the program works fine and I get an IOException.
    Some hints way the env for the process isn't set?
    Thanks
    ========================================================
    import java.io.*;
    public class Test {
    /** Version der Klasse. */
    public static final String VERSION = "$Revision:$";
    public static void main(String[] arg) {
    try {
    call("ls", new String[]{"PATH="});
    } catch (Exception ex) {
    System.out.println(ex);
    private static void call(String cmd, String[] env)
    throws Exception
    Runtime rt = Runtime.getRuntime();
    try {
    System.out.println(cmd);
    Process p = rt.exec(cmd, env);
    StreamGobbler errorGobbler = new
    StreamGobbler(p.getErrorStream(), "ERROR", System.err);
    StreamGobbler outputGobbler = new
    StreamGobbler(p.getInputStream(), "OUTPUT", System.out);
    errorGobbler.start();
    outputGobbler.start();
    try {
    p.waitFor();
    } catch (InterruptedException e) {
    if (p.exitValue() != 0) {
    throw new Exception("Process failed");
    } catch (IOException ex) {
    System.out.println("IOException: " + ex.toString());
    class StreamGobbler extends Thread {
    private InputStream m_input;
    private OutputStream m_output;
    private String m_type;
    private StringBuffer m_message;
    StreamGobbler(InputStream is, String type, OutputStream os) {
    this.m_input = is;
    this.m_output = os;
    this.m_type = type;
    this.m_message = new StringBuffer();
    outputGobbler.start();
    try {
    p.waitFor();
    } catch (InterruptedException e) {
    if (p.exitValue() != 0) {
    throw new Exception("Process failed");
    } catch (IOException ex) {
    System.out.println("IOException: " + ex.toString());
    class StreamGobbler extends Thread {
    private InputStream m_input;
    private OutputStream m_output;
    private String m_type;
    private StringBuffer m_message;
    StreamGobbler(InputStream is, String type, OutputStream os) {
    this.m_input = is;
    this.m_output = os;
    this.m_type = type;
    this.m_message = new StringBuffer();
    public synchronized void run() {
    try {
    InputStreamReader reader = new InputStreamReader(m_input);
    BufferedReader bufferedReader = new BufferedReader(reader);
    PrintWriter writer = new PrintWriter(m_output, true);
    String line = null;
    while ( (line = bufferedReader.readLine()) != null) {
    writer.println(m_type + "> " + line);
    this.m_message.append(m_type + "> " + line + "\r\n");
    } catch (IOException ioe) {
    ioe.printStackTrace();
    public synchronized String getMessage() {
    return this.m_message.toString();

    I'm having the same problem...
    Have you been able to solve your problem yet?

  • HEAVY Problems with Linux x86_64 on K8T Neo

    Hello, Community!
    I experience *HEAVY* Problems with Linux on my MSI K8T Neo (FSR). Since the customer support of the german dependancy seems to ignore my call for help I'm in good hope that maybe you can help me out or give me some useful advise.
    First some Hardware Specs of my system:
    MSI K8T Neo FSR, Rev 1.1, BIOS 1.5
    AMD Athlon 64 3000+
    3x 512MB Kingston DDR400
    Enermax EG365P-VE (350W) PSU (3.3V/5V 185W Combinded)
    MSI GeForce FX5200 TDR 128
    Adaptec ATA RAID AAR1200A (HPT370A) in PCI Slot 3
    Hauppauge WinTV PCI in PCI Slot 5
    Maxtor 4K040H2 (40GB) as Primary Master
    JLMS XJ-HD166S DVD-ROM as Primary Slave
    LiteOn LDW-411S DVD+/-RW as Secondary Master
    LiteOn LTR-52327S CD-RW as Secondary Slave
    2x Maxtor 6Y060L0 (60GB) on HPT370A as Primary Master/Slave
    Seagate ST380020A (80GB) on HPT370A as Secondary Master
    Maxtor 32049U3 on HPT370A as Secondary Slave
    KeyTronic KT2001 USB Keyboard
    Microsoft Optical Wheel Mouse Blue USB
    I've downloaded Fedora Core 1 x86_64 as well as the lately released Fedora Core 2 test 3 x86_64 distribution. Both CD sets have been burnt ok.
    If I try to install Core 1 x86_64 (Kernel 2.4.22-1.2179) the kernel crashes with a "attempted to kill idle task" panic. As far as I've learned the workaround is to give idle=poll as kernel parameter. This resolves the kernel panic, but the installer randomly crashes with segfaults at a random stage; sometimes while loading anaconda, sometimes during package install.
    If I try to install Core2 test 3 x86_64 (Kernel 2.6.5) I get a, completely new, error message while the kernel does the PCI Scan:
    ******* Your BIOS seems to not contain a fix for K8 errata #93
    ******* Working around it, but it may cause SEGVs or burn power
    ******* Please consider a BIOS update
    ******* Disabling USB legacy in the BIOS may also help
    I removed my USB keyboard, connected a PS/2 keyboard, disabled to USB Legacy option (I need it enabled in order to use Ghost) in the BIOS and booted again.
    The error message is gone now, but as in Core 1 the installer still crashes randomly with segfaults. I'm still unable to go all the way through the installation routine.
    I even tried to install Fedora Core 1 "i386": again there are segfaults during install.
    Contrary to the problems I experience while trying to install Linux my Windows XP (32-Bit), as well as a test installation of Windows XP 64-Bit, run like a charm without any problems. Strange but true.
    Since I already read trough several posts in this forum I already tried running my system with memory sticks from another manufacturers as well as with a more powerful PSU. I even removed my tv-card and raid-controller.
    Nogo - Linux still crashes randomly and Windows still works without any flaws.
    Has anyone a clue what I can/must do to successfully install Linux?
    Might it be that the BIOS has some flaws that might cause the problems?
    Has anyone managed to install Linux (what distribution) on this Mainboard?
    I would greatly appreciate any help. If you need to know something I haven't provided here please feel free to ask. I'll answer ASAP.
    Thank you in advance.
    P.S.: The system is *NOT* overclocked in any way.

    And now even the last problem is solved ...
    Since I was successful in installing a basic Gentoo system but still failed to install Fedora I reflashed BIOS 1.5. This time I cleared the CMOS by unplugging the PSU, setting the jumper and removing the backup battery.
    Yesterday I only flashed it with the /a switch, which should have cleared the CMOS as well - so far for the theory. However, it once went fine as I upgraded from BIOS 1.1 to 1.4.
    After setting up the BIOS options again I gave it another try and booted from Fedora (Core 2 test 3) install CD: No more complains about the CPU errata, although USB legacy is enabled, and I even went through the installation without any problems.
    It seems as I will stick with Gentoo as my primary distribution since the kernel makes a more "mature" impression than the one from Fedora (i.e. the K8 PowerNOW! Driver seems to be missing in Fedora's Kernel 2.6.5).
    By using an spare Athlon XP Mainboard I worked out that only one of my three Kingston memory sticks had errors - I'm going to replace the faulty stick tomorrow.
    Now for the conclusio:
    Thanks, especially you JLP, for helping me with my issue. Without the advise to use Gentoo, and the included MemTest86, I wouldn't have been able to track down the error to a faulty memory stick that fast since Windows always ran fine.

  • Runtime.exec() on RedHat Linux

    Guys
    Like many before me, it seems, I've having a nightmare with Runtime.exec() across platforms when executing local files.
    I've gone for the basic but robust strategy of writing the required function to a local file and then executing the file. This has worked fine on Windows NT/2000 and on Solaris. But RedHat Linux doesn't want to know.
    I know my permissions are good to execute. I can create the file then run it at the command line, but then whenever I go to run from within Java I get an exit value of 255.
    An old chestnut, I know. But can anyone offer an help?
    Cheers
    Dom

    Here's a small class & main method that illustrates the problem.
    The output I get is:
    File path: /tmp/Temp26345.sh
    chmod +x exit value: 0
    Executing file: 255
    I can then go into /tmp and run ./Temp26345.sh at the command line and get the "ls" command to run.
    import java.io.*;
    public class FileExecutor
         public static void main( String[] args )
              if( args.length == 0 )
                   System.out.println("Arguments must be given: [filename] [writeable]");
                   return;
              try
                   FileExecutor fe = new FileExecutor();
                   File executable = fe.createFile( args[0] , args[1] );
                   fe.executeFile( executable );
              catch( Throwable t )
                   t.printStackTrace();
         public File createFile( String fileName , String contents )
              throws IOException
              //Create the file.
              File tempFile = File.createTempFile( fileName , ".sh" );
              //Write to the file.
              FileOutputStream fos = new FileOutputStream( tempFile );
              OutputStreamWriter osw = new OutputStreamWriter( fos, "UTF-8" );
              int length = contents.length();
              osw.write( contents , 0 , length );
              osw.flush();
              osw.close();
              fos.close();
              return tempFile;
         public void executeFile( File file )
              throws InterruptedException , IOException
              String filePath = file.getAbsolutePath();
              System.out.println( "File path: " + filePath );
              Runtime runtime = Runtime.getRuntime();
              //Actual system permission.     
              Process process_perm = runtime.exec( "chmod +x " + filePath );
              int exitValue = process_perm.waitFor();
              System.out.println( "chmod +x exit value: " + exitValue );
              //Execute the file.
              Process process_exec = runtime.exec( filePath );
              exitValue = process_exec.waitFor();
              System.out.println( "Executing file: " + exitValue );

  • Java.lang.Runtime.exec problem in ubuntu 9.10

    Hi:
    I tried to run some command in the java code , for example "grass64 -text /home/data/location", this command works well in the terminal, however when I call it in the java code I got some excepetions.
    My code is :
    public class Grass {
         public static String grassBatJob="GRASS_BATCH_JOB";
         public void run(String cmd,String jobPath) {
              //set the environments variables
              Map<String, String> env=new HashMap<String, String>();
              env.put(grassBatJob, jobPath);
              String gisDataBase="/home/kk/grass/GrassDataBase";
              String location="spearfish60";
              String mapset="PERMANENT";
              cmd=cmd+" "+gisDataBase+"/"+location+"/"+mapset;
              CommandLine line=new CommandLine(cmd);
              //the real cmd should be >>grass64 -text /home/kk/grass/GrassDataBase/spearfish60/PERMANENT
              System.out.println("start line=="+line.toString());
              DefaultExecutor de=new DefaultExecutor();
              try {
                   int index=de.execute(line,env);
                   System.out.println(index);
              } catch (ExecuteException e) {
                   e.printStackTrace();
              } catch (IOException e) {
                   e.printStackTrace();
         public static void main(String[] args) {
              String jobPath=Grass.class.getResource("grass.sh").getFile();
              new Grass().run("grass64 -text", jobPath);
    The real cmd I want to execute is "grass64 -text /home/kk/grass/GrassDataBase/spearfish60/PERMANENT" with the envrionment variable "GRASS_BATCH_JOB=jobPath",it works well in the ternimal ,however in my application I got the exception"
    java.io.IOException: Cannot run program "grass64 -text /home/kk/grass/GrassDataBase/spearfish60/PERMANENT": java.io.IOException: error=2, No such file or directory
         at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
         at java.lang.Runtime.exec(Runtime.java:593)
         at org.apache.commons.exec.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:58)
         at org.apache.commons.exec.DefaultExecutor.launch(DefaultExecutor.java:246)
         at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:302)
         at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:149)
         at org.kingxip.Grass.run(Grass.java:27)
         at org.kingxip.Grass.main(Grass.java:38)
    Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
         at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
         at java.lang.ProcessImpl.start(ProcessImpl.java:65)
         at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
         ... 7 more
    I wonder why?

    Thanks for all of your reply, and now I can run the command, however I met some problems when I tried to get the result of the exec.
    The core codes are shown below:
    String cmd="g.version";
    String[] exe={"bash","-c",cmd};
    Process p1=Runtime.getRuntime.exec(exe,env); // the env has been set
    GrassThread outThread=new GrassThread("out", p1.getInputStream());
    outThread.start();
    GrassThread errorThread=new GrassThread("error", p1.getErrorStream());
    errorThread.start();
    int exitVal = p1.waitFor();
    String resu=outThread.sb.toString();
    System.out.println("==========the output start========");
    System.out.println(resu);
    System.out.println("==========the output end========");
    System.out.println("ExitValue: " + exitVal); //------------------> line one
    public class GrassThread extends Thread{
         public StringBuffer sb=new StringBuffer();
         public GrassThread(String type,InputStream is) {
              this.type=type;
              this.is=is;
         public void run() {
              try {
                   InputStreamReader isr = new InputStreamReader(is);
                   BufferedReader br = new BufferedReader(isr);
                   String line = null;
                   while ((line = br.readLine()) != null) {
                        System.out.println(type + ">" + line);
                        sb.append(line).append("\r");  // ----------------------------> line two
    }I define a StringBuffer in the GrassThread to save the output (see the code where I marked by "line two"), and when the process complete, I check the StringBuffer to get the output (see code where I marked by "line one"), however the output in the console of the IDE are :
    ----------- output in the console of the IDE start -------------
    ==========the output start========
    ==========the output end========
    ExitValue: 0
    out>GRASS 6.4.0RC5 (2009)
    ----------output in the console of the IDE end--------------------
    I can not understand, in the code "line one", I first get the output using "System.out.println(resu);",then I print the exitvalue,but why the order of the output in the console is not what I expected?
    Another question, the code above assume the output can be got from the Process's getInputStream, however sometimes the output maybe come from the Process's getErrorStream, so how to handle it?
    Edited by: apachemaven on 2010-3-5 ??5:38

  • Runtime exec problem to execute a C program

    Hi,
    I've spend lot of time trying to find a solution without success...
    My aim is to run a C program from a java application under linux. My C code is the following:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    main(int argc, char **argv){
    printf("hello world \n");
    Once compiled I run my java application wich run the binary through a runtime.exec().
    I followed the example given by
    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
    with the same input gobblers and threads.
    For some reason it doesn't work: nothing comes out...
    When I call "ls" instead of my binary it works perfectly!
    WHY??
    Any help would be greatly appreciated!

    Thanks for the reply.
    Yes it seems that JNI could be a solution, but it looks a bit complicated an maybe not so well adapted to my purpose.
    The executables I want to execute from my java application don't need any arguments.
    If JNI is really the only way I'll try to use it but is there any good reason why runtime exec doesn't work? It is supposed to execute any executable isn't it?
    cheers

  • Runtime.exec() - Problem when using cvs-command

    I have a problem with the Runtime.getRuntime().exec() - Command. I try to execute a command to export files from our cvs-repository. As you hopefully know, cvs produces a lot of output.
    When I start my 'cvs export ... '- command from the console-window of windows, everything works perfect. But when I try to use the Runtime.getRuntime().exec("CVS export ...") the created cvs-subprocess stops after the export of the first three files. When I close the main-window, where the cvs-process was started from, the cvs-process continues working.
    I could see, that many others had the same problem, but I couldn't find a real solution there.
    Is there a possibility to clear/delete the output-buffer of the cvs-subprocess, because I don't really need the information, that cvs gives me. It is enough for me when cvs stores the files :-)
    My source:
    public void executableTest()
    Runtime run = Runtime.getRuntime();
    try
    Process cvsProcess = run.exec("cvs export .... ");
    cvsProcess.waitFor();
    BufferedReader in = new BufferedReader
              ( new InputStreamReader(cvsProcess.getInputStream()) );
         String line;
         while ((line = in.readLine()) != null)
              System.out.println(line);
         catch (Exception e)
         System.out.println(e.getMessage());
    Thanks for your help.

    if the buffer is overflowing, then you don't want to do the waitfor until after you've hit the end of the inputstream, me thinks.

  • Runtime.exec() hangs with 1.4.1

    Hello altogether,
    I am trying to execute a command with Runtime.getRuntime.exec()
    I have already taken care of capturing the output and I observe that depending of the program I try to execute the process hangs.
    I am using JRE 1.4.1_02 under Redhat 7.2 with kernel 2.4.18-26
    Executing the same program under JRE 1.3.1 the program does not hang.
    Executing 'top -bn0q' hangs, executing 'ls -als' it hangs.
    Here is my sample code:
    <code>
    import java.io.*;
    public class Exec
    /** catches the output in a parallel thread */
    class StreamReader extends Thread
    String category = null;
    InputStream is;
    StreamReader(String category, InputStream is)
    this.category = category;
    this.is = is;
    public void run()
    try
    System.out.println(this.category+": reader runs");
    InputStreamReader isr = new InputStreamReader(this.is);
    BufferedReader br = new BufferedReader(isr);
    String line = null;
    while (br.ready() && (line = br.readLine())!=null)
    System.out.println(this.category+':'+line);
    catch (Exception e)
    e.printStackTrace();
    public void run(String[] cmd)
    StringBuffer outStrBuf = new StringBuffer();
    try
    Runtime rt = Runtime.getRuntime();
    System.out.println("got runtime");
    Process process = rt.exec(cmd);
    System.out.println("fired cmd");
    // any errors
    System.out.println("prepare error stream");
    StreamReader errSr = new StreamReader("ERR",process.getErrorStream());
    // any output
    System.out.println("prepare output stream");
    StreamReader outSr = new StreamReader("OUT",process.getInputStream());
    // start the readers to read
    System.out.println("start readers");
    errSr.start();
    outSr.start();
    System.out.println("waiting for process to end");
    process.waitFor(); //Waits for the subprocess to complete.
    catch (Exception e)
    System.err.println("Error while executing cmd: " + cmd);
    e.printStackTrace();
    System.out.println(outStrBuf);
         public static void main(String[] args)
    String [] cmd = {"top","-bn0q"};
    if (args.length >= 1)
    cmd = args;
    System.out.println(args[0]);
    Exec exec = new Exec();
    exec.run(cmd);
    </code>
    The output of java Exec is:
    [user]$ java Exec
    got runtime
    fired cmd
    prepare error stream
    prepare output stream
    start readers
    waiting for process to end
    OUT: reader runs
    ERR: reader runs
    ...and there it hangs. Interesting is, that when I use ls -als as command, I get the directory listing.
    Do you have any ideas what I am doing wrong? Is there any difference in the Runtime.exec() between 1.3 and 1.4 version?

    Unbelievable and what a shame. I was hacking 2 days on several variations of this problem and the solution and I finally found one difference:
    while (br.ready() && (line = br.readLine())!=null)
    I assume that when executing the command, the output streams are not ready and my Output gobbler threads end.
    ...however the command is still executing and starts to write its output. And as we all know this will overflow the buffer and the process hangs.
    So the final solution is:
    /** catches the output in a parallel thread */
    class StreamReader extends Thread
      String category = null;
      InputStream is;
      StreamReader(String category, InputStream is)
        this.category = category;
        this.is = is;
      public void run()
        try
          System.out.println(this.category+": reader runs");
          InputStreamReader isr = new InputStreamReader(this.is);
          BufferedReader br = new BufferedReader(isr);
          String line = null;
          while (/**br.ready() &&*/ (line = br.readLine())!=null)
            System.out.println(this.category+':'+line);
        catch (Exception e)
          e.printStackTrace();
    }So the only question that I have open: Why does this makes no problem with 1.3 but with 1.4 ?

  • Runtime.exec  problems

    Hi
    I would like to open a chm file from my "help" menu.
    I got two problem related to that:
    1.The first time the menu is clicked i start the process and the help is opened on top of my application frame.
    but - the second time It is opened - the only wat to recognize i sthe process is still active is to call exitValue (if it get an exception - process is still active) but - how can i make the frame on top of my application frame( the current active frame)
    2.when the application is closed the help application does not "die" with the rest of the application.
    I will be happy to get some ideas of how can i control it.
    this is my code:
    Runtime runtime=  Runtime.getRuntime();
            try {
                if(process==null){
                     process=runtime.exec(new String[] {"cmd.exe","/c" , helpLink});
                else{
                    try {
                        process.exitValue();
                        process = runtime.exec(new String[]{"cmd.exe", "/c", helpLink});
                        if (log.isDebugEnabled())
                            log.debug("process finish working");
                    } catch (IllegalThreadStateException e1) {
                        if (log.isDebugEnabled())
                            log.debug("process still working");
            } catch (IOException e1) {
                if (log.isErrorEnabled()){
                    log.error("could not open help file"+ helpLink);
                    log.error("exception:",e1);
                WorkingAreaManager.getWorkingAreaManagerInstance().displayErrorMessage(COULD_OPEN_HELP);
            }thanks,Liat

    1.The first time the menu is clicked i start the
    process and the help is opened on top of my
    application frame.
    but - the second time It is opened - the only wat to
    recognize i sthe process is still active is to call
    exitValue (if it get an exception - process is still
    active) but - how can i make the frame on top of my
    application frame( the current active frame)Sorry I don't know the answer to that. What happens if you invoke it a second time... does it bring up a completely new frame?
    2.when the application is closed the help application
    does not "die" with the rest of the application.
    I will be happy to get some ideas of how can i
    control it.process.destroy()?

  • Runtime.exec command with spaces

    I'm having problems using exec on (unix) commands that take filenames as a parameter - eg chmod.
    The problem is that I've been blessed with some filenames which contain spaces and I can't figure out a way to pass these through.
    The code I'm trying is :
    String fs="/";
    String droot="home";
    String fname="tom test";
    String fullFileName=fs + droot + fs + fname;
    String outlist[] = runCommand("chmod 777 " + fullFileName );
    if fname contains no spaces, then this will work fine, but (as in the example above) if it contains a space, then I get an error (can't find files).
    Any ideas?
    Thanks
    Tom

    The reason that putting quotes around the filename works on the command line is that they affect how the command line interprets them.
    However, Runtime.exec does not intepret the quotes as special characters. If you have a space in an argument, you should use the Runtime.exec method that takes a String[] argument, and place each argument in an array element.

  • Runtime.exec--problems writing to external file

    Hi. I went to http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html, and am still quite confused regarding the use of Runtime.exec, for my purposes. I want to decompile a CLASS file using javap, and then write that to a TXT file, for easier reading/input to JAVA. Now, I use the following code (a modification of what I got from http://www.mountainstorm.com/publications/javazine.html, as the "traps" article's sample code is WAY too confusing--they say the compiler had the output sent to text.txt, without even showing how in the source code they did that), but it hangs up. Modifications to the string array cause different results, such as showing the javap help menu, or saying that the class wasn't found, but I think the way I did the array here is right:
    import java.util.*;
    import java.io.*;
    public class Test {
            try {
             String ls_str;
                String[] cmd = {"C:\\j2sdk1.4.2_04\\bin\\javap", "-c", "-classpath", "H:\\Java\\metricTest", "metricTest > blah.txt", ""};
                Process ls_proc = Runtime.getRuntime().exec(cmd);
             // get its output (your input) stream
             DataInputStream ls_in = new DataInputStream(
                                              ls_proc.getInputStream());
             try {
              while ((ls_str = ls_in.readLine()) != null) {
                  System.out.println(ls_str);
             } catch (IOException e) {
              System.exit(0);
         } catch (IOException e1) {
             System.err.println(e1);
             System.exit(1);
         System.exit(0);
    }

    Also, jesie, I realize that's what I need...the only
    problem is, the name "test.txt" is nowhere to be found
    in the source code! lolLooks like I have to explain this, then.
    When you look at a Java program you'll notice that it always has a "main" method whose signature looks like this:public static void main(String[] args)When you execute that program from the command line, it takes whatever strings you put after the class name and passes them to the main program as that array of strings. For example if you run it likejava UselessProgram foo bar hippothen the "java" command takes the three strings "foo", "bar", and "hippo" and puts them into that args[] array before calling the "main" method.
    That means that inside the "main" method in this case, "args[0]" contains "foo", "args[1]" contains "bar", and "args[2]" contains "hippo".
    Now go back to the example and see how it lines up with that.

  • AdobeReader8 problem with Linux Linpus

    Hi,
    I can open reader by clicking on the icon but when i have to accept the licence I click "yes" and nothing happen.
    If i open it with the Terminal like this:
    #cd /opt/Adobe/Reader8/bin/
    #./acroread
    the Reader open it without agree to licence.
    If I do a mousepad I have this message error :
    #!/bin/sh
    # Copyright (c) 1996-2007, Adobe Systems Incorporated
    # All Rights Reserved
    set_lang_ESP_utf()
    ST_ER_AR02="ERROR: no se encuentra el directorio de instalación."
    ST_LANG="ESP"
    ST_SMALL_N="n"
    ST_ER_AR01="ERROR: no se puede determinar el directorio actual."
    ST_ICE_INFO_03="El sitio Web presentó el siguiente certificado"
    ST_ER_AR04="ERROR: The environment variable TMPDIR points to an invalid path."
    ST_ICE_INFO_05="Certificado instalado correctamente."
    ST_ER_DIR="ERROR: Cannot make directory %s."
    ST_YES="sÃ"
    ST_ER_AR03="ERROR: Cannot find %s."
    ST_ICE_INFO_07="No se encuentra openssl, asegúrese de que el binario openssl está en PATH"
    ST_INFO_AR04="Entre las plataformas instaladas se incluyen las siguientes:"
    ST_VERSION="versión"
    ST_INFO_AR01="The OS named %s is currently not installed."
    ST_ICE_INFO_04="Do you want to accept and install it (y|n)? "
    ST_CAPS_Y="S"
    ST_ICE_INFO_01="Obteniendo el certificado del sitio Web...."
    ST_ICE_INFO_02="Procesando..."
    ST_ICE_INFO_08="No se instalará el certificado."
    ST_INFO_AR03="Intente ejecutar en una plataforma instalada conectándola a su pantalla."
    ST_ICE_INFO_06="Hubo un problema al instalar el certificado"
    ST_SMALL_Y="s"
    ST_ER_AR05="%s not installed for this configuration, %s."
    set_lang_ESP()
    ST_ER_AR02="ERROR: no se encuentra el directorio de instalación."
    ST_LANG="ESP"
    ST_SMALL_N="n"
    ST_ER_AR01="ERROR: no se puede determinar el directorio actual."
    ST_ICE_INFO_03="El sitio Web presentó el siguiente certificado"
    ST_ER_AR04="ERROR: The environment variable TMPDIR points to an invalid path."
    ST_ICE_INFO_05="Certificado instalado correctamente."
    ST_ER_DIR="ERROR: Cannot make directory %s."
    ST_YES="sí"
    ST_ER_AR03="ERROR: Cannot find %s."
    ST_ICE_INFO_07="No se encuentra openssl, asegúrese de que el binario openssl está en PATH"
    ST_INFO_AR04="Entre las plataformas instaladas se incluyen las siguientes:"
    ST_VERSION="versión"
    ST_INFO_AR01="The OS named %s is currently not installed."
    ST_CAPS_Y="S"
    ST_ICE_INFO_04="Do you want to accept and install it (y|n)? "
    ST_ICE_INFO_01="Obteniendo el certificado del sitio Web...."
    ST_ICE_INFO_02="Procesando..."
    ST_ICE_INFO_08="No se instalará el certificado."
    ST_INFO_AR03="Intente ejecutar en una plataforma instalada conectándola a su pantalla."
    ST_ICE_INFO_06="Hubo un problema al instalar el certificado"
    ST_SMALL_Y="s"
    ST_ER_AR05="%s not installed for this configuration, %s."
    if echo $LANG | grep -i utf >/dev/null; then
    set_lang_ESP_utf
    else
    set_lang_ESP
    fi
    ver="8.1.3"
    if [ "$1" = "-version" ]; then
    echo "$ver"
    exit
    fi
    LaunchBinary()
    if [ "`uname -s`" = "Linux" ] && [ ! -x /lib/ld-lsb.so.3 ]; then
    exec /lib/ld-linux.so.2 ${1+"$@"}
    else
    exec ${1+"$@"}
    fi
    MkTempInternal()
    if [ "${mktemp_count+set}" != "set" ]; then
    mktemp_count="0"
    fi
    mktemp_file="/tmp/acrobat.$$.${mktemp_count}"
    while /usr/bin/test -e "$mktemp_file"
    do
    mktemp_count="`expr $mktemp_count + 1`"
    mktemp_file="/tmp/acrobat.$$.${mktemp_count}"
    done
    touch "$mktemp_file" && chmod 600 "$mktemp_file" && echo "$mktemp_file"
    MkTemp()
    MKTEMP="`which mktemp 2>/dev/null`";
    if [ "$MKTEMP" != "" ]; then
    else
    MKTEMP="MkTempInternal";
    fi
    $MKTEMP /tmp/acrobat.$1
    readlink()
    OLDPWD="`/bin/pwd`"
    lfile="$1"
    while [ -h

    found it at:
    http://www.aspireoneuser.com/forum/viewtopic.php?f=5&t=9641&hilit=adobe+reader
    cd /home/user/.adobe
    sudo chown -R user Acrobat
    sudo chgrp -R user Acrobat
    (because of the hidden perhaps first ls-a)

  • Process/runtime.exec() problem

    i m trying to compile and run java files thru runtime.exec()...i m working on linux...when i compile a singe file it works all right....however when i compile multiple files using the same command only replacing "filename.java" by "*.java" its not working.
    error: cannot read: /home/pico/example/demo/*.java
    1 error
    any help will be appreciated

    I doubt, *.java will get replaced automatically with all your java-files. It's just treated as as file called "*.java", because resolving the wildcard is usually done by a shell which is not running when using Runtime.exec().
    You have to (re)solve it yourself.
    Hope this helped.

Maybe you are looking for

  • My iPhoto spins but doesn't open

    iPhoto spins but does not open

  • Firefox 35.0.1 will not start on Yosemite 10.10.2 even with clean install.

    I've tried Safe Mode and I've looked for the crash report in Application Support, unfortunately, there is no Firefox folder! Version 33.1 works OK. The Troubleshooting information below is for version 33, since I can't get 35 to start. I don't know i

  • Fear and Loathing in 9.0.2.25 Backup Land

    After resisting the urge to take a bat to my case, I did some forum browsing and discovered that I made a serious error in judgement by assuming iTunes "backup library to disc" function worked. Short'n long of it, I made it through 13 out of 22 dvd's

  • Twitter osx 10.4.11 please help

    Twitter wont open properly on osx tiger 10.4.11 i was wondering if there is a app i can download on my ibook g4 to use twitter thanks!

  • Associating Development-plan with position

    Hi. We are trying to implement the Development-plan sub-module in our system and thus we are new to the whole deal. We created a Development-plan using transaction "OOEC" and were able (we think...) to associate it to an employee, but what we realy w