代码之家  ›  专栏  ›  技术社区  ›  jpsstavares

从另一个Java应用程序启动Java应用程序

  •  5
  • jpsstavares  · 技术社区  · 14 年前

    我正在做一个Java记录/回放工具,我需要从我的Java应用程序启动Java应用程序。 我需要访问EventDispatchThread,以便截获事件并记录它们,因此我将通过反射启动应用程序(简化代码段):

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

    我以前动态地将所有jar加载到类路径,应用程序几乎完全启动。

    当应用程序需要访问任何文件并使用相对路径进行访问时,就会出现问题。因为应用程序是通过我的应用程序启动的,所以路径与从其正常路径启动的路径不同,并且找不到文件。

    我能做些什么来解决这个问题?动态更改执行环境?有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Tom Hawtin - tackline    14 年前

    我建议在启动目标应用程序时,将代码加载为“Java代理”。

    (使用您的方法,您还将发现系统类加载器错误。)

        2
  •  0
  •   ykaganovich Mike Samuel    14 年前

    一般来说,没有办法做到这一点。

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

    你可以试试 System.setProperty("user.dir", "C:\\Some\\Location"); 但它可能不适用于所有情况,会给你带来奇怪的行为。

    对于一个应用程序来说,依靠它的启动目录是一个非常糟糕的设计。

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

    否则,地狱,复制/symlink数据文件到您的目录,这样客户端应用程序可以找到它们…