【问题标题】:Is it possible in Java to invoke main method in new process with reflection是否可以在 Java 中通过反射在新进程中调用 main 方法
【发布时间】:2012-07-17 21:07:59
【问题描述】:

是否可以在新进程中执行m.invoke(param1,param2)之类的语句。

即,我想执行一个 Java 类文件,方法是首先使用反射迭代地搜索其主类,然后找到主类以在新进程中调用它。

【问题讨论】:

  • 你当然可以启动一个新的JVM。那可能是一个新的过程。但我认为这不是你想要的。线程呢?为什么是流程?
  • @ThomasUhrig 是的,你确实是对的,但我希望你能解决我已经发布的问题stackoverflow.com/questions/11300700/…
  • 啊……!现在你想知道如何启动一个新的 JVM?类似 Runtime.getRuntime().exec("java -jar yourApp.jar");我认为应该可以。
  • @ThomasUhrig 不,但这不能解决我的问题。我只能通过反射而不是通过 jar 调用来运行目标应用程序,而且我看不到任何将语句“m.invoke(param1,param2)”传递给 exec() 方法的方式。

标签: java reflection processbuilder


【解决方案1】:

肯定的。

  1. 在 Path 中查找所有可用的类
  2. 自省并找到具有main方法的类[检查签名]
  3. 使用 java ProcessBuilder[JRE 5 +] 或创建一个新的 java.lang.Process 来生成它应该“正常工作”的新进程

【讨论】:

  • 但这就是问题出现的地方。应该将什么命令传递给流程构建器的实例来执行 main 方法。
  • 当你执行一个jar文件(甚至是单个类)时,JVM总是会执行main方法。
  • 说我们有一个类 Foo.class(它有一个静态的 main 方法),它在 jar 文件 bar.jar 中。然后使用 Foo 类中的静态 main 方法执行 jar,使用“java -cp bar.jar Foo”作为命令。我假设你的 PATH 环境变量中有 java 可执行文件
  • @sand1988 让我知道这是否能解决您的问题。对您的问题 +1。
  • @PuspenduBanerjee 是的,这很好,但我的限制是我无法从 jar 执行应用程序我所能做的就是读取 jar 的内容,然后使用反射执行它,然后问题就出现了.. 另一个面临的问题是stackoverflow.com/questions/11300700/… 所以我能看到的唯一解决方案是在新进程中调用应用程序。让我总结一下:1)我有一个加载可执行 jar 文件的 java 应用程序 2)使用反射它调用 jar 的 main 3)现在如果目标应用程序包含 Frames
猜你喜欢
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-12
  • 1970-01-01
  • 2016-09-21
相关资源
最近更新 更多