2011-07-21 14 views
1

私はシステムプロキシ検出にいくつかの迷惑な問題があります。 実際には、実行時にシステムプロキシ設定を検出する正しいコードを持っています。 ターゲットステーションのすべてを保存して実行すると、それは絶対に正しく機能します。システムプロキシ設定の検出に失敗しました。

しかし、私はターゲットステーションでコードを少し実行して、他のステーション(ApacheのWebサーバーが動作する)に他のもの(jars)を保存します。メインから、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); 

どちらのコードも機能しますが、出力には唯一の違いがあります。 誰かに考えがありますか?

ありがとうございます!

Zsomi

答えて

0

私は、問題の根本的な原因を発見した:

DefaultProxySelectorが真」、JVMごとのシングルトンとするSystem.setProperty(「java.net.useSystemProxies」場合に基づいて、それの動作です");設定されているかどうか。

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

私は原因はありますが、まだ解決策はありません。

よろしくお願いします。 Zsomi

関連する問題