2

概要: 1. 私のプロジェクトでは、LTI-CIVIL を使用して Web カメラをキャプチャします。2. Eclipse では、すべて正常に動作します。3. LTI_CIVIL はネイティブ ライブラリを使用してハードウェアにアクセスするため、JarClassLoader を使用することにしました (情報はhttp://www.jdotsoft.com/JarClassLoader.php#downloadにあります)。) これにより、実行時にネイティブ ライブラリを一時フォルダーに展開できます。すべてがうまく機能し、ウェブカメラ キャプチャ ストリームにアクセスすることさえできます... タイプ com.lti.civil.NativeVideoFormat のウェブカメラから渡された画像を操作しようとしました。問題は、実行可能 jar から実行すると、明らかに実装しているのに、このクラスが com.lti.civl.VideoFormat を実装していないと表示されることです。Eclipse で実行されているコードの getClass() を出力して、Web カメラの画像が両方とも同じタイプであることを確認しました。ただし、NativeVideoFormat の getClass() インスタンスを出力すると、Eclipse バージョンでは true が出力されますが、jar バージョンでは false が出力されます。

興味深いことに、この問題は以前にも発生しましたが、解決策はありません: https://forums.oracle.com/forums/thread.jspa?messageID=10637883刻

ご協力いただきありがとうございます

4

1 に答える 1

0

あなたはそのインターフェースを「明らかに実装している」と言っていますが、問題は実際には実装していないことだと思います。そのインターフェースタイプの「化身」が複数あると思います。

実行時のクラス (またはインターフェイス) の実際の型は、Classオブジェクトの ID に依存します。

  • その場合clazz == clazz2、それらは同じタイプを表します。(equals(Object)上のメソッドClassは同じ条件をテストします...)
  • それ以外の場合は、クラス名に関係なく、そうではありません。

アプリケーションでクラスローダを使用した結果、1 つの.classファイルが 2 つの異なるクラスローダで 2 回ロードされたようです。JarClassLoaderインスタンスに正しい親クラスローダーがないと思われます。

于 2012-11-05T00:54:36.560 に答える