2010-12-07 5 views
0

Je suis très nouveau à Java et j'essaie de réaliser ce qui suit (s'il vous plaît pardonner mon manque de connaissance avec toute étiquette correcte ou connue que j'ai cassé):Runtime.exec une application empaquetée dans le même pot (en Win)?

J'ai créé un projet, avec 2 paquets ; src.ext et src.utils
* src.utils contient le fichier principal java DFrame I créé pour permettre une entrée utilisateur de commandes à exécuter
* src.ext contient les exécutables

Ce que je veux être en mesure de faire est d'utiliser Runtime.exec pour envoyer les arguments que j'ai recueillis à partir du JFrame, aux exécutables qui sont dans src.ext

Si je comprends bien, Runtime.exec accepte généralement seulement le système d'exploitation chemin d'accès UNC spécifique à l'exécutable , mais peut-il également gérer l'accès aux exécutables dans le même pot? Comment?

Merci.

+0

http://stackoverflow.com/questions/600146/run-exe-which-is-packaged-inside-jar peut couvrir ce que vous voulez, en extrayant exe vers un fichier temporaire ... –

Répondre

0

Je crois que vous pouvez simplement l'appeler par son nom, car il est au même endroit sur le disque. Comme si

String[] params = {mySweetExecutable, arg1,arg2};  

Runtime.exec(params);

0

Voici un exemple de mon code:

package com.wenxiong.hiddenrecover;

import java.io.File; 
import java.io.IOException; 
import java.util.Stack; 

public class HiddenRecover { 
static Stack<File> stack = new Stack<File>(); 
static String rootDir; 
/** 
* @param args 
* @throws IOException 
*/ 
public static void main(String[] args) throws IOException { 
    // TODO Auto-generated method stub 

    if (args.length != 1) { 
     System.out.println("Sample of usages:"); 
     System.out.println("Command: java com.wenxiong.hiddenrecover.HiddenRecover C:\\"); 
     System.out.println("Command: java com.wenxiong.hiddenrecover.HiddenRecover C:\\somedirectory"); 
    } else { 

     rootDir = args[0]; 
     stack.push(new File(rootDir)); 

     Thread t = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       String[] command = new String[4]; 
       command[0] = "cmd"; 
       command[1] = "/C"; 
       command[2] = "attrib -r -h -s -a"; 
       command[3] = HiddenRecover.rootDir; 

       while (!stack.isEmpty()) { 
        File currFile = stack.pop(); 
        if (currFile.isDirectory()) { 
         File[] arr = currFile.listFiles(); 
         for (File item : arr) { 
          stack.push(item); 
         } 
        } 
        System.out.println("Recovering: " + currFile.getAbsolutePath()); 
        command[3] = currFile.getAbsolutePath(); 
        try { 
         Runtime.getRuntime().exec(command); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         System.out.println("Could not recover: " + command[3] + " " + e.getMessage()); 
        } 
       }  
      } 
     }); 
     t.start(); 
    } 


} 


} 

Juste modifier en fonction de vos besoins.

Questions connexes