1

我们创建了一个构建逻辑电路的程序,并使用NetBeans 平台的LookupServiceProvider机制将所有可用的逻辑元素放到 UI 面板上。

模型(MVC)有一个 BasicElement 类,它是所有元素的 ServiceProvider。这个类是公共的,它的包是公共导出的,并且 View 模块依赖于它。View 模块只知道这个 Model 模块。当有人使用带有 @ServiceProvider注释的一组元素添加新模块时,View 会将带有 Lookup 元素的新找到的元素加载到调色板中。然后用户可以将调色板中的元素添加到场景中,创建一些电路并保存(序列化)它们。

问题是当程序尝试打开保存的文件(反序列化元素)时出现异常。因为没有模块知道(依赖于)带有元素的模块(并且这些模块中的包不能公开导出)。元素仅被注释,足以让它们到达用户。

是否有可能每次都添加对具有反序列化元素的新模块的依赖。或者一般来说,有一种方法可以反序列化隐藏在 ServiceProvider 类后面的类对象。

4

1 回答 1

2

不久前我遇到了这个确切的问题。经过大量研究,我发现您可以更改 ObjectInputStream 使用的类加载器。请查看我关于详细说明我的解决方案的主题的博客文章。http://www.pellissier.co.za/hermien/?p=179

于 2012-12-13T14:52:09.367 回答