2010-03-05 224 views
5

我在做一個Java Record/Replay工具,我需要從我的主Java應用程序啓動Java應用程序。 我需要,以攔截事件,並記錄他們訪問EventDispatchThread,所以我通過反射啓動該應用程序使用(代碼片段簡體):從另一個Java應用程序啓動Java應用程序

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

我以前所有的罐子動態加載到classpath並且應用程序幾乎完美啓動。

當應用程序需要訪問任何文件並使用相對路徑執行時,就會出現該問題。由於應用程序是通過我的應用程序啓動的,因此路徑與從其正常路徑啓動的路徑不同,並且找不到文件。

我能做些什麼來解決這個問題?動態改變執行環境?有任何想法嗎?

回答

2

我會建議在啓動目標應用程序時將代碼加載爲「Java Agent」。

(用你的方法,你還會發現,系統類加載器是錯誤的。)

+0

我查一下如何爲「的Java代理」,什麼恰好運行代碼手段。雖然我不明白你的括號 – jpsstavares 2010-03-05 17:39:23

0

一般情況下,有沒有辦法做到這一點。

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

你可以試試System.setProperty("user.dir", "C:\\Some\\Location");但它可能不會對所有的情況下工作,會給你怪異的行爲。

這是一個非常糟糕的設計,應用程序依賴於它從中啓動的目錄。

我可以給你的最好的建議是從錯誤的應用程序期望啓動的目錄啓動你的應用程序(假設你知道那個目錄是什麼)。

否則,地獄,複製/符號鏈接的數據文件到您的目錄中,以便客戶端應用程序可以找到他們...

相關問題