2

大纲: 1. 我的项目使用 LTI-CIVIL 来捕获网络摄像头。2. 在 Eclipse 中,一切正常。3. 由于 LTI_CIVIL 使用本机库来访问硬件,我选择使用 JarClassLoader(可在此处找到信息http://www.jdotsoft.com/JarClassLoader.php#download) 允许在运行时将本机库解压缩到临时文件夹中。一切正常,我什至可以访问网络摄像头捕获流,直到...我尝试使用从网络摄像头提交的图像,该图像类型为 com.lti.civil.NativeVideoFormat。问题是,当从可执行 jar 运行时,它说这个类显然没有实现 com.lti.civl.VideoFormat 。我什至打印了在 eclipse 上运行的代码的 getClass() 并验证了网络摄像头 Image 的类型相同。但是,当我打印出 getClass() instanceof NativeVideoFormat 时,在 Eclipse 版本中打印为 true,但在 jar 版本中打印为 false。

有趣的是,这个问题以前也出现过,但没有解决方案: https ://forums.oracle.com/forums/thread.jspa?messageID=10637883刻

谢谢你的帮助

4

1 回答 1

0

您说“它显然确实”实现了该接口,但我认为问题在于它实际上没有。我认为您有该接口类型的多个“化身”。

运行时类(或接口)的真实类型取决于Class对象的身份:

  • 如果clazz == clazz2那么它们代表相同的类型。(测试相同条件的equals(Object)方法...)Class
  • 否则,无论类名如何,它们都不会。

您的应用程序对类加载器的使用似乎导致一个.class文件在两个不同的类加载器中加载了两次。我怀疑您的JarClassLoader实例没有正确的父类加载器。

于 2012-11-05T00:54:36.560 回答