2010-06-15 13 views
0

Je crée un programme similaire à un éditeur. Si l'utilisateur choisit Fichier-> Ouvrir dans la fenêtre principale, je veux lancer une nouvelle copie du processus d'édition avec le nom de fichier choisi comme argument. Cependant, pour que j'ai besoin de savoir ce que la commande a été utilisée pour démarrer le premier processus:Processus de régénération Java

java -jar myapp.jar blabalsomearguments // --- need this information 
> Open File (fileUrl) 
> exec("java -jar myapp.jar blabalsomearguments fileUrl"); 

Je ne suis pas à la recherche d'une solution en cours, je l'ai déjà mis en œuvre que. J'aimerais avoir les avantages que procurent les processus séparés.

+0

Sinon, vous pouvez toujours obtenir simplement les arguments transmis de principal et au lieu de fraie un nouveau processus, frayer une autre fenêtre. –

+0

Je lance déjà une autre fenêtre, voir ma remarque ci-dessus. –

Répondre

1

Depuis le lancement de Java -> Java, vous pouvez utiliser le chemin de classe existant pour définir le chemin de classe sur la ligne de commande. Ce type de chose fonctionne vraiment bien dans l'environnement de développement.

ProcessBuilder selfLauncher = new ProcessBuilder(
"java", "-cp", System.getProperty("java.class.path"), 
"com.my.mainClass"); 
selfLauncher.start(); 

Mise à jour: Pour les fichiers exécutables jar, vous aurez une classpath qui est tout simplement le chemin relatif au fichier jar lui-même. Si vous voulez les arguments de la ligne de commande, vous devrez les sauvegarder de main, et les ré-appliquer au lancement.

Vous pouvez voir ceci en emballant le programme suivant dans un pot. Je ne suis pas vraiment sûr de ce qui se passe si vous avez des jars dans le fichier jar exécutable. Ils apparaissent probablement dans le classpath.

public class TestJarPath { 
    public static void main(String args[]) throws Exception { 
     for (String s : args) 
     System.out.print("[" + s + "] "); 
     System.out.println(); 

     String cp = System.getProperty("java.class.path"); 
     for (String s : cp.split(";")) 
      System.out.println(s); 
    } 
} 

Pour java -jar ..\tst.jar X, vous obtenez une sortie comme:

[X] 
..\tst.jar 
+0

Utilisez également System.getProperty ("java.home") pour obtenir le répertoire de base JRE en cours d'exécution (Sun JVM) – ddimitrov

+0

Ah, oui, c'est aussi une bonne astuce (si vous avez un environnement de développement JVM différent) – Justin

+0

travaillera. Qu'en est-il des arguments VM? –

0

Si tout le reste échoue, essayez d'écrire un script batch/shell pour lancer votre application. Dans Windows, vous pouvez passer% CmdCmdLine% à Java pour obtenir la ligne de commande entière.

Voir http://www.robvanderwoude.com/parameters.php

0

Pour autant que je sais est-il pas moyen portable pour obtenir cette information. J'ai trouvé une propriété dans le runtime gcj mais je doute que cela couvre un grand pourcentage des utilisateurs.

Je pense que la pratique acceptée est « Try and Pray »:

L'espoir est sur le chemin, (le chemin est disponible, de sorte que puisse être vérifié)

sinon, vérifier si JAVA_HOME est défini, et l'utiliser pour trouver Java. Si ce n'est pas le cas, cochez les cases les plus probables sur tous les systèmes d'exploitation pour lesquels vous avez reçu des rapports de bogue. Eh bien, il est compliqué de vérifier JAVA_HOME et le chemin et de demander à l'utilisateur de configurer explicitement une JVL si cela échoue.