一尘不染

设置JVM / JRE以自动使用Windows代理

javascript

我确实看到了有关为JVM设置代理的问题,但我想问的是人们如何利用已经配置的代理(在Windows上)。

这是我的问题的演示:

  1. 转到控制面板-> Java并设置代理地址。
  2. 运行以下简单的小程序代码(我正在使用Eclipse IDE):
import java.awt.Graphics;
import javax.swing.JApplet;
import java.util.*;

public class Stacklet extends JApplet {
    private String message;
    public void init(){
        Properties props = System.getProperties();
        message = props.getProperty("http.proxyHost", "NONE");      
        message = (message.length() == 0)? "NONE": message;
    }

    public void paint(Graphics g)
    {
        g.drawString(message, 20, 20);
    }
}

无论您在Java控制面板中进行的设置如何,Applet均显示“无”。如果可以确定Windows代理设置(通常在Internet Explorer中设置),那将是最好的选择,但是在Java控制面板中进行额外的配置步骤仍然是可以接受的解决方案。

谢谢!


阅读 579

收藏
2020-09-17

共1个答案

一尘不染

可以使用ProxySelector类检测代理,并通过使用System类的setProperty方法分配环境变量来分配系统代理:

System.setProperty("java.net.useSystemProxies", "true");
System.out.println("detecting proxies");
List l = null;
try {
    l = ProxySelector.getDefault().select(new URI("http://foo/bar"));
} 
catch (URISyntaxException e) {
    e.printStackTrace();
}
if (l != null) {
    for (Iterator iter = l.iterator(); iter.hasNext();) {
        java.net.Proxy proxy = (java.net.Proxy) iter.next();
        System.out.println("proxy type: " + proxy.type());

        InetSocketAddress addr = (InetSocketAddress) proxy.address();

        if (addr == null) {
            System.out.println("No Proxy");
        } else {
            System.out.println("proxy hostname: " + addr.getHostName());
            System.setProperty("http.proxyHost", addr.getHostName());
            System.out.println("proxy port: " + addr.getPort());
            System.setProperty("http.proxyPort", Integer.toString(addr.getPort()));
        }
    }
}
2020-09-17