Io ho effettuato questo test.

Il JAR da invocare (ClasseChiamata.jar) contiene solamente la seguente classe

codice:
package classechiamata;
import java.io.*;

public class ClasseChiamata {
   public static void main(String[] args) {
      FileWriter fw = null;
      PrintWriter pw = null;
      try {
         fw = new FileWriter("pippo.log");
         pw = new PrintWriter( fw );
         for(String s : args) {
            pw.println("Parametro: " + s);
         }
         pw.flush();
      } catch (Exception e) {
         e.printStackTrace();
      } finally {
         if (pw != null) {
            try { pw.close(); } catch (Exception e) { }
         } else {
            if (fw != null) {
               try { fw.close(); } catch (Exception e) { }
            }
         }
      }
   }
}
La classe che deve invocarlo, è così composta:

codice:
public class ClasseChiamante {
   public static void main(String[] args) throws Exception {
      Runtime.getRuntime().exec(
         new String[] {"java",
                            "-jar",
                            "ClasseChiamata.jar",
                            "-pippo",
                            "-pluto",
                            "-debug",
                            "-fd"}
      );
   }
}
Questo è il file generato dalla chiamata al programma "ClasseChiamante":

codice:
Parametro: -pippo
Parametro: -pluto
Parametro: -debug
Parametro: -fd
Quindi, il lavoro viene svolto correttamente e i parametri vengono passati tutti, in modo corretto e nell'ordine esatto in cui sono elencati.

Come già detto... prendi il Process generato dalla chiamata a exec(), ottieni l'InputStream e verifica cosa accade... può essere che venga sollevata un'eccezione, ma non la potrai mai vedere altrimenti.

Ciao.