2011-07-21 184 views
1

我在系統代理檢測中遇到了一些神祕的問題: 實際上,我有正確的代碼在運行時檢測系統代理設置,它也可以處理pac文件和http代理設置。 當我在目標站上存儲並執行所有操作時,它的工作原理絕對正確。系統代理設置檢測失敗

但是:我在目標站上運行一小段代碼,並在其他站上運行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); 

這兩個代碼段的工作,唯一不同的是在輸出。 有沒有人有一些想法?

在此先感謝!

Zsomi

回答

0

我找到了問題的根源:

的DefaultProxySelector是每個JVM單和它的行爲基礎上,如果System.setProperty(「java.net.useSystemProxies」,「真「);是否設置。

當URLClassloader使用它時,該值在實例化時爲false。而當我在「a」類中嘗試使用它時,它無法找到系統代理設置,因爲在instatiation該屬性沒有設置。

所以我有原因,但沒有解決方案。

Regards, Zsomi