我正在开发一个基于
Java的组件游戏引擎,现在当我对要重建的组件进行更改并重新启动编辑器以使更改生效(或者如果应用程序正在运行,我可以使用一些有限的热代码注入调试模式).
我正在寻找一种方法来允许用户修改组件的源并重新加载它们,而无需重新启动应用程序(可能只是退出并进入游戏模式).我还需要一个重要的功能是最终导出的代码应该是本地Java代码(所以最终结果中不应该使用解释器)).
你能给我指出如何在项目中集成beanshell解释器?我可以手动监视源文件夹进行更改,并将更新的java类提供给它,但是hotswap将如何发生呢?
解决方法
首先,标题有点混乱.您不需要集成BeanShell.你实际需要的是:
>定义一个正确的架构
>使用Java Compiler API来处理java类
建筑
假设你有一个对象图.有很多的对象,引用等等,所以用一个新的实例替换一些实例真的是一个棘手的任务.而不是解决这个问题,您可以将动态部分隐藏在“静态”代理之后.代理将处理所有重新加载的东西(包括源文件夹监视).
重新加载之前:
重装后:
完成后,您可以轻松跟踪变化,并在需要时更新动态部分.
Java编译器API
而不是使用解释语言,您可以使用Java,即时编译,并使用’Class.forName()’加载.有很多不同的例子,因为这个方法有一段时间.
这里有一些细节:
> Add dynamic Java code to your application
> Compiling fully in memory with javax.tools.JavaCompiler