2010-03-05 287 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");但它可能不会对所有的情况下工作,会给你怪异的行为。

这是一个非常糟糕的设计,应用程序依赖于它从中启动的目录。

我可以给你的最好的建议是从错误的应用程序期望启动的目录启动你的应用程序(假设你知道那个目录是什么)。

否则,地狱,复制/符号链接的数据文件到您的目录中,以便客户端应用程序可以找到他们...

相关问题