You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodenameOne应用无代理时Connection refused错误的原因与解决方法

CodenameOne取消代理后图片下载失败(Connection refused)问题排查与解决

问题场景

运行以下CodenameOne代码实现图片下载并显示功能:

int WIDTH = Display.getInstance().getDisplayWidth();
Form f = new Form();
f.getToolbar().hideToolbar();
f.getStyle().setBgColor(0xFFFFFF);
EncodedImage placeholder = EncodedImage.createFromImage(Image.createImage(WIDTH, WIDTH), false);
URLImage puppyImage = URLImage.createToStorage(placeholder, "puppy.png", "https://images.newscientist.com/wp-content/uploads/2021/06/03141753/03-june_puppies.jpg?crop=1:1,smart&width=1200&height=1200&upscale=true");
Container imageContainer = new Container();
imageContainer.add(puppyImage);
f.add(imageContainer);
f.show();

代理环境下应用运行正常,图片可成功下载保存;但取消代理后抛出连接拒绝错误,堆栈信息如下:

java.net.ConnectException: Connection refused: connect
    at java.base/java.net.PlainSocketImpl.connect0(Native Method)
    at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:101)
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
    at java.base/java.net.Socket.connect(Socket.java:608)
    at java.base/java.net.Socket.connect(Socket.java:557)
    at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182)
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
    at java.base/sun.net.www.http.HttpClient$1.run(HttpClient.java:526)
    at java.base/sun.net.www.http.HttpClient$1.run(HttpClient.java:524)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/sun.net.www.http.HttpClient.privilegedOpenServer(HttpClient.java:523)
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:564)
    at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:265)
    at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:372)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:212)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1208)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
    at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:189)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1592)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1520)
    at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:334)
    at com.codename1.impl.javase.JavaSEPort.getResponseCode(JavaSEPort.java:10179)
    at com.codename1.io.ConnectionRequest.performOperationComplete(ConnectionRequest.java:905)
    at com.codename1.io.NetworkManager$NetworkThread.runCurrentRequest(NetworkManager.java:314)
    at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:390)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

原因分析

  1. 本地网络环境限制:所在网络(如企业/校园网)的防火墙或出站规则强制要求通过代理访问外部HTTPS资源,直接连接被拦截。
  2. 代理配置残留:取消代理后,CodenameOne应用或开发环境仍保留旧的代理配置,导致尝试用无效代理地址发起连接。
  3. DNS解析失败:本地DNS服务器无法正确解析目标图片的域名,导致无法建立有效连接。
  4. 目标服务器IP限制:目标服务器限制了你的公网IP访问,仅允许代理IP段的请求。

解决办法

1. 验证本地网络可用性

  • 直接在浏览器中打开目标图片URL,确认是否能正常加载。如果浏览器也无法访问,说明是网络环境问题,需联系网络管理员开放出站HTTPS权限,或确认是否必须使用代理。

2. 清除代理配置残留

  • 在代码中显式重置网络代理设置:
    // 清除全局代理配置
    ConnectionRequest.setProxy(null, 0);
    NetworkManager.getInstance().clearProxy();
    
  • 完全重启CodenameOne开发环境和应用,确保旧配置被彻底清除。

3. 修复DNS解析问题

  • 在命令行执行nslookup images.newscientist.com,检查是否能返回正确的IP地址。
  • 切换公共DNS服务器(如8.8.8.8或114.114.114.114),重新测试DNS解析和应用连接。

4. 验证服务器访问权限

  • 使用手机热点等其他网络测试应用,如果能正常下载图片,说明当前网络的IP被目标服务器限制,需更换网络或联系服务器管理员。

5. 添加异常处理优化体验

  • 在图片下载代码中添加异步回调,处理下载失败场景:
    String imageUrl = "https://images.newscientist.com/wp-content/uploads/2021/06/03141753/03-june_puppies.jpg?crop=1:1,smart&width=1200&height=1200&upscale=true";
    URLImage puppyImage = URLImage.createToStorage(placeholder, "puppy.png", imageUrl, new URLImage.ImageAdapter() {
        @Override
        public EncodedImage adaptImage(EncodedImage downloadedImage, EncodedImage placeholderImage) {
            return downloadedImage;
        }
    
        @Override
        public boolean asyncOperationComplete(boolean success) {
            if (!success) {
                Dialog.show("提示", "图片下载失败,请检查网络设置", "确定", null);
            }
            return success;
        }
    });
    

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 07:36:20