3

このコードを使用して、Java でシステム プロキシを取得します。

System.setProperty("java.net.useSystemProxies", "true");
    List<Proxy> list = null;
    try
    {
        list = ProxySelector.getDefault().select(new URI("http://google.com"));
    }
    catch (final URISyntaxException e)
    {
        e.printStackTrace();
    }

しかし、「リスト」には のみが含まれてDIRECTいて、Internet Explorer で設定した設定は含まれていません。奇妙なことに、当社のソフトウェアの以前のバージョンでは、まったく同じコードがシステム プロキシの正しいリストを返します。

コードが正しく機能しなくなる原因を知っている人はいますか?

いくつかのネイティブ ライブラリを追加しましたが、それしか思い浮かびませんでした。しかし、これがこのコードにどのように影響するかはまだわかりません。同じEclipse環境などで、小さなテストアプリで同じコードをテストしましたが、動作します。しかし、アプリケーション内で同じコードをデバッグすると、リストにはDIRECT.

何か案は?

4

1 に答える 1

4

ネイティブ ライブラリが問題でした。Swing に WebBrowser を埋め込むために、NativeSwing を使用しました。NativeInterface.open() または NativeInterface.initialize() を実行すると、プロキシ設定が変更され、後で変更できなくなります。したがって、プロキシ設定を読み取り、静的フィールドに保存します。次に、それらが必要なときに、この静的フィールドから読み取ります。

話は続きます。上記のアプローチは、Eclipse 内からのみ機能しました。jar をダブルクリックすると、「ネイティブ側が着信接続を受信しませんでした!」というメッセージが表示されました。. その理由は、私が使用している NativeInterface が原因ではありませんが、Java がシステム プロキシ設定を処理する方法と関係があります。

この記事を見つけました: http://ideen2011.blogspot.de/2011/08/java-proxyselector-usesystemproxies-and.html

つまり: ProxySelector.setDefault(null); を使用します。ソケット接続がシステムプロキシなどの影響を受けないようにしたい場合。少なくともそれは私を助けましたが、バックグラウンドで正確に何が起こっているのかを理解しようとしています。

話は 2015 年に続きます: 前述のアプローチにより、この問題が発生しました: JavaFX webview set Proxy

だから私は代わりにお勧めします

ProxySelector.setDefault(null)

使用する

ProxySelector.setDefault(ProxySelector.getDefault())
于 2013-02-19T12:31:24.587 に答える