つまり、Javaはどのプロトコルが利用可能かをどのように決定するのでしょうか。Eclipse内からいくつかのコードを実行しましたが、問題なく動作します。次に、Eclipseの外部から同じコードを実行すると、「不明なプロトコル」のMalformedURLExceptionが発生します。おそらくそれはコードベースか何かに関係していますか?ヒントがあれば役に立ちます。
ありがとう!
つまり、Javaはどのプロトコルが利用可能かをどのように決定するのでしょうか。Eclipse内からいくつかのコードを実行しましたが、問題なく動作します。次に、Eclipseの外部から同じコードを実行すると、「不明なプロトコル」のMalformedURLExceptionが発生します。おそらくそれはコードベースか何かに関係していますか?ヒントがあれば役に立ちます。
ありがとう!
プロトコルを解決する作業は、プロトコルによって小文字でURLStreamHandler
格納されているによって行われます。URL.handlers
次に、ハンドラーはURLStreamHandlerFactory
atによって作成されURL.factory
ます。多分日食はそれで猿になっていますか?
一部のURLコンストラクターはストリームハンドラーを使用し、URL.setURLStreamHandlerFactoryを使用してファクトリを設定できます。
これは、プロトコルハンドラーの開発に関するWeb投稿です。
プロトコルハンドラーを定義するJava標準の方法は、ここで説明されています:http: //java.sun.com/developer/onlineTraining/protocolhandlers/
これは、ブート(?)クラスローダーで使用可能なプロトコルハンドラークラスに依存しています。これはOSGi(したがってEclipse)ではうまく機能しません。OSGiは、バンドル/プラグインがプロトコルハンドラーに貢献できるようにするために、このメカニズムのラッパーを提供します。参照:http ://www.osgi.org/javadoc/r4v41/org/osgi/service/url/URLStreamHandlerService.html
Eclipseは、独自のプロトコルであるbundle-resource(iirc)も提供します。これは、Eclipseの外部では確実に機能しません。
おそらくクラスパスの問題です。含めたライブラリ(jar)に依存するプロトコルを使用していて、eclipseからJARをエクスポートした場合、プロジェクトに含めたJARファイルは、eclipseの外部で実行されているコードによって検出されない可能性があります。必要なライブラリを指すマニフェストファイルがjarに必要です。