2010-03-05 15 views
5

Ich mache ein Java-Record/Replay-Tool und ich muss Java-Anwendungen von meiner Java-App starten. Ich brauche den Zugang zum EventDispatchThread, um die Ereignisse abzufangen und speichert sie, so dass ich die Anwendung durch Reflexion mit (Code-Schnipsel vereinfacht) Start:Starten Sie eine Java-Anwendung von einer anderen Java-Anwendung

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

ich vorher alle dynamisch laden die Gläser auf dem Classpath und die Anwendung startet fast perfekt.

Das Problem tritt auf, wenn die Anwendung auf jede Datei zugreifen muss und dies mit relativen Pfaden tut. Da die Anwendung über meine Anwendung gestartet wird, ist der Pfad nicht identisch mit dem Pfad, der von seinem normalen Pfad gestartet wird, und die Dateien werden nicht gefunden.

Was kann ich tun, um dieses Problem zu lösen? dynamisch die Ausführungsumgebung ändern? irgendwelche Ideen?

Antwort

2

Ich würde vorschlagen, Ihren Code als "Java Agent" zu laden, während Sie die Zielanwendung starten.

(Mit Ihrer Methode Sie auch, dass das System Class Loader ist falsch finden.)

+0

Ich werde überprüfen, wie Sie den Code als „Java-Agenten“ laufen und was das genau meint. Ich habe deine Klammer jedoch nicht verstanden ... – jpsstavares

0

Im Allgemeinen gibt es keine Möglichkeit, dies zu tun.

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

Sie können System.setProperty("user.dir", "C:\\Some\\Location"); versuchen, aber es wird wahrscheinlich für alle Fälle nicht und werden Sie seltsame Verhalten geben.

Es ist ein ziemlich schlechter Entwurf für eine App, sich auf das Verzeichnis zu verlassen, von dem sie gestartet wurde.

Der beste Rat, den ich Ihnen geben kann, ist, Ihre App aus dem Verzeichnis zu starten, von dem erwartet wird, dass die App sich nicht meldet (vorausgesetzt, Sie wissen, was dieses Verzeichnis ist).

Andernfalls Hölle, Kopieren/die Daten-Dateien in Ihr Verzeichnis Symlink, so dass die Client-Anwendung sie finden kann ...

Verwandte Themen