从单独运行的jar中获取字段

时间:2019-07-11 15:54:41

标签: java reflection

我知道这很通用,但是有什么方法可以运行jar,然后使用与运行jar完全不同的java程序访问字段?我想最终设置一个已知的JTextField的文本(我知道JTextField和类的名称)。我知道如果它们全部作为一个单元运行,我该如何使用反射来完成此操作,但是我找不到任何方法来获取包含正在运行的jar实例的Object,这正是您所需要的。

2 个答案:

答案 0 :(得分:0)

每个运行中的Java进程都使用其类加载器和类创建自己的虚拟机,它们也被操作系统本身隔离。
为了能够进行通信,您可以在程序1中创建ServerSocket并侦听数据/命令。第二个可以使用Socket连接到第一个,并发送定义的命令,这些命令将由第一个解释。基本上,您应该使用一些通信通道并在程序之间传递数据。

答案 1 :(得分:0)

这不是最好的解决方案,但是您可以在运行中的JAR的类路径上覆盖一个类,而无需“实际”更改JAR。

假设您要修改com.someone.elses.ClassA。我将首先复制该类文件并对其进行反编译,然后进行修改,然后将其重新编译为我自己的版本,但使用完全相同的类路径。

当您运行他们的JAR时,可以在类路径上给您的类版本更高的优先级,这样它将代替他们的类而被加载。

java -cp "your.class:their.jar" path.to.their.Main

该程序将与修改后的类一起运行,使您可以访问所需的任何内容,甚至可以从环境变量中读取内容。