2010-04-30 188 views

回答

1

factory字段URLConnection(超類HttpURLConnection)是一個靜態包訪問成員變量。它通過API修改的唯一地方是setContentHandlerFactory()方法,正如您已經注意到的,您只能爲應用程序中的任何URL連接(或子類)調用一次。我相信有一種解決方法,但它並不理想:您可以使用反射來重置和/或更改factory字段的值(假設您的應用程序具有相應的安全管理員權限以製作field accessible)。

這裏有一個片段,將這樣做:

ContentHandlerFactory newFactory = ... // create factory instance 
factoryField = URLConnection.class.getDeclaredField("factory"); 
factoryField.setAccessible(true); 
factoryField.set(null, newFactory); 

這樣做的問題是,API並不期望這將不會發生,所以有可能是不必要的副作用(因爲它適用於所有的網址連接子類)。基本上你會冒這個風險。

+0

我試過你的建議,但它仍然會顯示同一工廠已經定義的錯誤。 – artsince 2010-05-03 06:18:43

+0

@自:我沒有任何這樣的問題。你應該注意到我上面的代碼片段實際上是設置一個新的工廠實例。如果你想「重置」它爲null(所以你可以再次調用'setContentHandlerFactory'),你應該這樣做:'factoryField.set(null,null);' – Ash 2010-05-03 10:03:34

+0

是的,實際上我已經將該字段設置爲null。如果此方法適用於您,我可能會遇到另一個問題... – artsince 2010-05-03 12:53:37