为什么这个应用程序阻止?

时间:2010-12-04 20:35:34

标签: http java-me

我刚尝试了一些来自互联网的代码并运行它,但它阻止了我的模拟器。代码是:

public void getcontents()
{
HttpConnection c = null;
InputStream is = null;
StringBuffer sb = new StringBuffer();
try
{
  c = (HttpConnection)Connector.open("http://www.java-samples.com",Connector.READ_WRITE, true);
  c.setRequestMethod(HttpConnection.GET); //default
  is = c.openInputStream(); // transition to connected!
  int ch = 0;
  for(int ccnt=0; ccnt < 150; ccnt++) { // get the title.
    ch = is.read();
    if (ch == -1){
      break;
    }
    sb.append((char)ch);
  }
}
catch (IOException x){
 x.printStackTrace();
}
finally{
     try{
       is.close();
          c.close();
     } catch (IOException x){
          x.printStackTrace();
     }
}
System.out.println(sb.toString());
}

我用OK命令调用了该函数。

模拟器被阻止,直到我杀死进程。 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

尝试逐步调试调试器中的代码。或者至少添加一些日志语句。我的猜测是,流正在等待来自HTTP连接的数据并且没有被刷新,但是我还没有运行代码来验证断言。

答案 1 :(得分:1)

我在代码中看到的唯一循环是for循环,它是有限的(不超过150次迭代),因此不会使代码无限期地执行。

我建议通过代码在各个点放置一些调试输出语句(输出到控制台甚至对话框警报)。这将帮助您确定导致问题的代码行。例如,如果在for循环之前和之后放置一行,并且在执行时只显示第一行,则表示您的问题在循环内的某处。然后,您可以通过在循环中放置调试行(包括循环编号)来缩小范围,以找出导致问题的确切位置。

答案 2 :(得分:0)

尝试从服务器读取响应正文之前,请尝试检查响应代码。这将确认连接成功或打印出错误响应。在致电Connector.open()之后放置以下内容:

         if (c.getResponseCode() != HttpConnection.HTTP_OK) {
             throw new IOException("HTTP response code: " + c.getResponseCode());
         } else {
             System.out.println("**Debug** : HTTP_OK received, connection established");
         }

如果运行代码然后没有输出异常或HTTP确认,那么您可能会阻止连接尝试(检查模拟器与Internet的连接)。如果你确实得到了HTTP_OK,那么你可能会阻止服务器的HTTP响应,或者没有。在结果上发表评论将是一个好主意。