当前位置: 首页 > 面试题库 >

使用HttpURLConnection时出现“非法状态异常:已经连接”

庾奇思
2023-03-14
问题内容

将DoOutput设置为true时,出现非法状态异常。

public boolean sendLinksToMaster(String ipport, List<String> links){

        boolean sent = false;
        String[] tokens = ipport.split(":");    
        String data = edu.cis555.searchengine.utils.Utils.generateLinks(links);
        HttpURLConnection conn=null;
        try{
            String encodedData = URLEncoder.encode(data, "UTF-8");
        try{

                String ip =tokens[0];
                String port = tokens[1];
                String path = edu.cis555.searchengine.utils.Constants.URL_ADD_LINK;
                System.setProperty("http.keepAlive", "false");
                URL u = new URL("http", ip, Integer.parseInt(port),"/"+path);

                conn = (HttpURLConnection)u.openConnection();
                //ERROR IN THIS LINE
                conn.setDoOutput(true);
                conn.setRequestMethod("POST");
                OutputStream stream = conn.getOutputStream();
                stream.write(encodedData.getBytes());
                stream.close();

                if(conn.getResponseCode() == HttpURLConnection.HTTP_OK)
                    sent=true;

            //  LOG.debug(conn.getResponseCode());
                conn.disconnect();
            }catch(MalformedURLException mfe){
                LOG.debug(mfe.getMessage());
                if(conn!=null){
                    conn.disconnect();
                }
            }catch(IOException ioe){
                LOG.debug(ioe.getMessage());
                if(conn!=null){
                    conn.disconnect();
                }
            }

        }catch(Exception e){
            LOG.debug(e.getMessage());
            if(conn!=null){
                conn.disconnect();
            }
        }
        return sent;

    }

为相同显示的堆栈跟踪为:

java.lang.IllegalStateException: Already connected
at java.net.URLConnection.setDoOutput(Unknown Source)
at edu.upenn.cis455.xpathengine.utils.pool.ThreadPool.sendLinksToMaster(ThreadPool.java:357)
at edu.upenn.cis455.xpathengine.utils.pool.ThreadPool$Worker.processAndAddToQueue(ThreadPool.java:314)
at edu.upenn.cis455.xpathengine.utils.pool.ThreadPool$Worker.run(ThreadPool.java:269)
at java.lang.Thread.run(Unknown Source)

我没有发现我发送请求时做错了什么。任何人都可以指出缺少的内容或我做错了什么


问题答案:

我遇到了同样的问题并解决了。就我而言,这是因为我connection.getResponseCode()在NetBeans的调试界面中忘记了监视。希望它可以帮助其他人犯同样的错误。

如果您有任何相对于请求的响应值,如:手表getResponseCode()getResponseMessage()getInputStream()甚至只是connect(),你会在调试模式下出现此错误。

所有先前的方法都隐式调用connect()并激发该请求。因此,当您到达时setDoOutput,连接已经建立。



 类似资料:
  • 我在MediaCodec上得到了非法状态例外。configure()行,我正在尝试使用MediaCodec录制音频。这只发生在一些手机上,在标签上一切正常。这个特别的碰撞示例来自三星Galaxy S4。异常跟踪: 音频格式声明: 音频编码器初始化: 有人知道那可能是什么吗?奇怪的是,它只发生在某些设备上。欢迎提出任何建议!

  • 这是我如何使用它 - 此外,我已经在超文本传输协议GET周围放置了一个最终块- 这是我的堆栈跟踪- 我正在使用Quartz来安排监控Httpendpoint的工作…这是我的连接池配置 马文依赖..神器版本 编辑-嗯,这个问题通过在最后一个块中不关闭CloseableHttp客户端而得到解决…有人能告诉我为什么它会这样吗?如果我关闭客户端,为什么连接池会关闭? 上面的closeablehttpcli

  • 我在应用程序中访问房间DAOs时遇到问题。即使我通过rxjava在后台线程中执行操作,也会出现此错误:

  • 我正在尝试使用下面的快速加载API 连接…等是完美的。 我确切地知道它在哪里失败 例外情况是 < code >线程“main”Java . lang . illegalstateexception中出现异常:示例失败。 这是我试图上传的表格。它是格式,当我通过记事本打开它时,它看起来像这样 为什么我会得到这个异常?我该如何改进?据我理解问题是< code > pstmtfld . setascii

  • 我正在使用SunPKCS11连接到HSM设备。我有一些运行完美的单元测试(实际上他们会进行一些签名和验证),但是,当我将应用程序部署到tomcat或jetty时,我会得到这个异常(这个异常是在jetty中部署期间引发的,tomcat的异常是相似的): 下面是我如何实例化SunPKCS11的: 只是为了添加一些细节,我在windows server 2012上使用了64位java8。 更新1:我刚刚

  • 问题内容: 如何将轮询线程传递给另一个线程进行处理。程序执行在具有主方法和线程池的控制器类中: 主类控制器 具有轮询类的线程的方法 具有proc类的线程的方法 轮询类和控制器类 我的任务和问题是: 1.控制器应同时处理轮询器和处理器线程,并且应仅调用轮询器和处理器线程 2.现在我的问题是如何使轮询线程等待3秒并并行通知处理器。 我得到如下错误: 这里如何实现异步处理? 问题答案: 你需要阅读的东西