如何集成beanshell

Ant*_*hev 10 java beanshell

我正在使用java开发基于组件的游戏引擎,现在当我对组件进行更改时需要重建并重新启动编辑器以使更改生效(或者如果应用程序运行,我可以使用一些有限的热代码注入调试模式).

我正在寻找一种方法,允许用户修改组件的源并重新加载它们,而无需重新启动应用程序(可能只是退出并进入游戏模式).我需要的一个重要特性是最终导出的代码应该是本机Java代码(因此最终结果中不应使用解释器)).

你能给我一些关于如何在项目中集成beanshell解释器的指针吗?我可以手动监视源文件夹中的更改并将更新的java类提供给它,但是如何真正发生热插拔?

Ren*_*nov 4

首先,标题有点令人困惑。您不需要集成 BeanShell。你真正需要的是:

  1. 定义一个合适的架构
  2. 使用 Java 编译器 API 来处理 java 类

建筑学

假设您有一个对象图。有很多对象、引用等。因此,用新实例替换某些实例确实是一项棘手的任务。您可以将动态部分隐藏在“静态”代理后面,而不是解决此问题。代理将处理所有重新加载的内容(包括源文件夹监视)。

重新加载前:

在此输入图像描述

重新加载后:

在此输入图像描述

完成此操作后,您可以轻松跟踪更改并在需要时更新动态部分。

Java 编译器 API

您可以使用 Java,即时编译并使用“Class.forName()”加载,而不是使用解释性语言。由于这种方法已经存在了一段时间,所以有很多不同的例子。

以下是一些细节: