Запустите Java-приложение из другого Java-приложения. - PullRequest
5 голосов
/ 05 марта 2010

Я использую инструмент Java Record / Replay, и мне нужно запускать приложения Java из моего основного приложения Java. Мне нужен доступ к EventDispatchThread, чтобы перехватывать события и записывать их, поэтому я запускаю приложение через отражение с помощью (фрагмент кода упрощен):

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

Ранее я динамически загружал все фляги в путь к классам, и приложение запускается почти идеально.

Проблема возникает, когда приложению требуется доступ к любому файлу и он делает это с относительными путями. Поскольку приложение запускается через мое приложение, путь не совпадает с тем, который запускается по его обычному пути, и файлы не найдены.

Что я могу сделать, чтобы решить эту проблему? динамически менять среду исполнения? есть идеи?

Ответы [ 2 ]

2 голосов
/ 05 марта 2010

Я бы предложил загрузить ваш код как «Java-агент» при запуске целевого приложения.

(С помощью вашего метода вы также обнаружите, что загрузчик системного класса неверен.)

0 голосов
/ 06 марта 2010

В общем, нет способа сделать это.

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

Вы можете попробовать System.setProperty("user.dir", "C:\\Some\\Location");, но это, вероятно, не будет работать во всех случаях и даст вам странное поведение.

Довольно плохой дизайн для приложения, чтобы полагаться на каталог, из которого оно было запущено.

Лучший совет, который я могу вам дать, - запускать приложение из каталога, из которогонеправильно работающее приложение ожидает запуска (при условии, что вы знаете, что это за каталог).

В противном случае, черт возьми, скопируйте / symlink файлы данных в ваш каталог, чтобы клиентское приложение могло их найти ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...