1

システム プロキシの検出に不可解な問題があります。実際には、実行時にシステム プロキシ設定を検出する適切なコードがあり、pac ファイルと http プロキシ設定も処理できます。ターゲットステーションですべてを保存して実行すると、完全に正しく機能します。

BUT: ターゲット ステーションで小さなコードを 1 つ実行し、それ以外 (jar) はすべて、Apache Web サーバーが実行される別のステーションに保存します。メインから、URLClassloader を使用してクラスをロードします。これにより、ネットワークを介してコードがロードされ、プロキシ検出も担当します。このように、デフォルトのプロキシ セレクターは常に DIRECT を指定し、適切な設定を見つけることができません。

私が思うに、問題は私が設定したいということです

System.setProperty("java.net.useSystemProxies","true");

ロードされたクラスでは、どういうわけかこれは機能しません...しかし、プロパティ値をsysoutすると、true.

私は小さなテストプログラムを書きましたが、唯一の違いは次のとおりです。

A)

Class.forname("a"); -> a is in the classpath

B)

URL[] url = new URL[1];
url[0] = new URL("http://1.2.3.4/dtfw");
URLClassloader u = new URLClassloader(url);
Class.forname("a", true, u);

両方のコードが機能しますが、唯一の違いは出力にあります。誰にもアイデアはありますか?

前もって感謝します!!

ゾミ

4

1 に答える 1

0

問題の根本原因を見つけました:

DefaultProxySelector は JVM ごとにシングルトンであり、その動作は if System.setProperty("java.net.useSystemProxies","true"); に基づいています。設定されているかどうか。

URLClassloader が使用するため、インスタンス化されると、この値は false になります。そして、「a」クラスで使用しようとすると、システムプロキシ設定を見つけることができません。これは、インストール時にこのプロパティが設定されていなかったためです。

というわけで、原因はわかったのですが、解決策はまだありません。

よろしく、 ゾーミ

于 2011-07-22T10:58:47.527 に答える