如何修复图书馆的密封违规?密封违规:包org.lwjgl.opengl是密封的

时间:2016-05-09 12:58:39

标签: java slick2d

在按照以下说明设置项目作为基于Slick2d的项目的模板时:Slick2d wiki使用提供的代码在运行时测试设置here我不断遇到一大堆密封错误。我的想法是这个问题源于两个库中ljgwl.jar的版本,但Slick需要两个才能正常运行。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

包密封是一种Java功能,部分以JAR文件格式实现。它在几个地方进行了讨论,包括in Oracle's Java Tutorial,但最重要的是,当在Jar的清单中启用包密封时,属于该包的类不会出现在任何其他JAR文件中。

  

我的想法是这个问题源于两个库中ljgwl.jar的版本,但是Slick需要两个才能正常运行。

我不确定"库"的含义,因为这不是Java概念。但是,我怀疑你是否试图说你以某种方式从两个不同的来源获得ljgwl.jar个文件,并且你已经将它们都放入项目类路径中。这确实是一个问题,而不仅仅是封装密封。事实上,您可以感谢密封错误,因为它们可能使您免于更微妙,更难以诊断运行时错误。

  

我该如何解决这个问题?

您的类路径中只应有一个LWJGL副本,无论封装密封强制执行任何要求,并且无论类如何打包在jar文件中。看起来Slick2D发行版可能附带了LWJGL的副本 - 在这种情况下,使用它可能是最明智的。只要它在你的类路径中(因为Slick2D必须使用它),你应用程序中任何地方的任何类都可以使用它。

如果你需要应对LWJGL版本的不一致要求,或者如果你已经获得了一个将LWJGL类与其他东西结合在一起的JAR,那就太麻烦了,但这并没有改变底线:你必须选择一个版本的LWJGL,在您的应用程序中专门使用该版本,并在类路径中仅包含它的一个副本。