2010-03-05 17 views
5

Używam narzędzia Java Record/Replay i muszę uruchomić aplikacje Java z mojej głównej aplikacji Java. muszę dostęp do EventDispatchThread w celu przechwytywania zdarzeń i ich zapis, więc jestem uruchomieniu aplikacji poprzez odbicie z fragmentu kodu (uproszczony):Uruchamianie aplikacji java z innej aplikacji java

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

ja wcześniej dynamicznie załadować wszystkie słoików do ścieżki klasy a aplikacja uruchamia się niemal idealnie.

Problem występuje, gdy aplikacja musi uzyskać dostęp do dowolnego pliku i robi to przy użyciu względnych ścieżek. Ponieważ aplikacja jest uruchamiana przez moją aplikację, ścieżka nie jest taka sama, jak uruchomiona z normalnej ścieżki, a pliki nie zostaną znalezione.

Co mogę zrobić, aby rozwiązać ten problem? dynamicznie zmieniać środowisko wykonywania? jakieś pomysły?

Odpowiedz

2

Proponuję załadować twój kod jako "Agent Java" podczas uruchamiania aplikacji docelowej.

(Z metodę można również znaleźć, że ładowarka klasy system jest źle).

+0

Sprawdzę jak uruchomić kod Java jako „agenta” i co to dokładnie znaczy. Nie zrozumiałem twojego nawiasu, chociaż ... – jpsstavares

0

W ogóle nie ma sposobu, aby to zrobić.

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

Można spróbować System.setProperty("user.dir", "C:\\Some\\Location"); ale prawdopodobnie nie będzie działać dla wszystkich przypadków i daje dziwne zachowanie.

To dość zły projekt, aby aplikacja mogła polegać na katalogu, z którego została uruchomiona.

Najlepszą radą, jaką mogę ci dać, jest uruchomienie aplikacji z katalogu, z którego aplikacja będzie źle uruchamiana (zakładając, że wiesz, co to jest katalog).

W przeciwnym razie, do cholery, kopiowanie/podlinkowujemy pliki danych do katalogu, tak aby aplikacja klient może je znaleźć ...

Powiązane problemy