2012-11-05 48 views
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是同一类型的。但是,当我打印输出时,如果NativeVideoFormat的getClass()实例在eclipse版本中打印为true,但在jar版本中打印为false。LTI-Civil Project在导出为JAR时出现错误

有趣的是,这个问题曾经出现过,但没有解决办法: https://forums.oracle.com/forums/thread.jspa?messageID=10637883&#10637883

感谢您的帮助

回答

0

你说,“这显然是”实现这个接口,但是我觉得现在的问题是它实际上没有。我认为你有多种接口类型的“化身”。

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

  • 如果clazz == clazz2然后它们表示相同的类型。 (equals(Object)方法在Class测试条件相同...)
  • 否则它们不会,不管的类名称。

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

+0

我已经从JarClassLoader中查看了调试记录器的输出,但是实际上却处于如何继续的状态。 问题的一部分可能是我使用eclipse的自动jar导出向导? – sashu2012

+0

*“问题的一部分可能是我使用eclipse的自动jar导出向导吗?”* - 这不太可能。问题很可能与您使用该自定义类加载器的方式相同。你是否按照网站推荐的方式来完成......通过完全取代你的“主”类? –