2010-03-05 5 views
5

Je suis en train de créer un outil Java Record/Replay et j'ai besoin de lancer des applications Java à partir de mon application Java principale. Je besoin d'accéder au EventDispatchThread afin d'intercepter les événements et les enregistrer, donc je lance l'application par la réflexion avec (extrait de code simplifié):Lancer une application Java à partir d'une autre application Java

Class<?> app = Class.forName(mainClass); 
Method m = app.getMethod("main", new Class[] { String[].class }); 
m.invoke(null, new Object[] { new String[] {} }); 

I précédemment charger dynamiquement tous les pots au classpath et l'application se lance presque parfaitement.

Le problème se produit lorsque l'application doit accéder à n'importe quel fichier et le fait avec des chemins relatifs. Parce que l'application est lancée via mon application, le chemin n'est pas le même que celui lancé à partir de son chemin normal et les fichiers ne sont pas trouvés.

Que puis-je faire pour résoudre ce problème? changer dynamiquement l'environnement d'exécution? des idées?

Répondre

2

Je suggère de charger votre code en tant qu '"agent Java" lors du démarrage de l'application cible.

(Avec votre méthode, vous trouverez également que le chargeur de classe système est erroné.)

+0

Je vais vérifier comment exécuter le code comme un « Java Agent » et ce qui exactement veux dire. Je n'ai pas compris tes parenthèses, cependant ... – jpsstavares

0

En général, il n'y a aucun moyen de le faire.

http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=30b24551130ee4ffffffffc17df8d7ce8a9c3?bug_id=4117557

Vous pouvez essayer System.setProperty("user.dir", "C:\\Some\\Location"); mais il ne fonctionnera probablement pas pour tous les cas et vous donnera un comportement bizarre.

C'est une mauvaise conception pour une application de s'appuyer sur le répertoire à partir duquel elle a été lancée.

Le meilleur conseil que je puisse vous donner est de lancer votre application à partir du répertoire à partir duquel l'application se conduisant mal se déclenchera (en supposant que vous connaissiez ce répertoire).

Sinon, l'enfer, copier/créer un lien symbolique des fichiers de données dans votre répertoire afin que l'application client peut les trouver ...

Questions connexes