我将尝试在这个问题中尽可能具有描述性,因为它很难解释..
到此为止。我有两个jar文件。一个(我自己的),一个(Bukkit jar)。 bukkit jar,我在“./Server/bukkit.jar”中徘徊。我想在我自己的一个流程构建器启动的bukkit jar的运行实例中访问方法“org.bukkit.Bukkit.getServer()”罐子..
所以,这里..
我自己的罐子代码:
public class Fukkit {
public static void main(String[] args){
ProcessBuilder pb = new ProcessBuilder("java", "-cp", "bukkit.jar", "org.bukkit.craftbukkit.Main");
pb.directory(new File(new File(".").getPath() + File.separator + "Server"));
try {
pb.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//I now want to access that instance of bukkit.jar, and use the method
org.bukkit.Bukkit.getServer();
//From inside the jar..
//I cannot add it as a library, because the jar may be swapped out
//for another more updated version of bukkit.jar..
//But that method will always be present. Can someone help me out..?
}
}
答案 0 :(得分:1)
此方法无效。您正在尝试引用在单独的system process中加载的Java类 - 无论它是否是您当前进程的子级都无关紧要。从Java的角度来看,它是一个单独的Java虚拟机,两者之间没有特定于Java的通信。
您需要做的是:
Fukkit.main()
中,执行org.bukkit.craftbukkit.Main.main(new String [] {"your arguments here"})
。org.bukkit.Bukkit.getServer()
和其他方法。完成这个快速回答后,我现在才注意到你对JAR可能更新的评论。好吧,有一些在运行时重新加载JAR的高级方法,但我建议只要在发生这样的更新时重启你的程序。
另外,Bukkit没有插件架构(我假设我们正在讨论Minecraft Bukkit服务器)? 也许你正试图以迂回的方式做到这一点,这是导致问题的原因?尝试检查Bukkit的API是否不支持您想做的事情。