2012-11-05 60 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導出嚮導嗎?」* - 這不太可能。問題很可能與您使用該自定義類加載器的方式相同。你是否按照網站推薦的方式來完成......通過完全取代你的「主」類? –