2016-12-09 84 views
0

我有一個j2me項目中的方法,在這個項目中,正常工作2天后,它崩潰了。出現的錯誤如下:J2me - HTTP請求中的OutofMemory

Contacting website... 
java.lang.OutOfMemoryError 
    (stack trace incomplete) 

該方法是用於與網站進行通信的方法。它接收一個字符串和一個模式選擇器(i = 1或者smth else)並且繼續處理請求。這裏的代碼:

void enviarPost(int i, String comando)throws IOException, IllegalStateException, IllegalArgumentException, ATCommandFailedException{  
     System.out.println("Contacting website..."); 
     if(i == 1) 
      { 
      url = "http://websitedummy.com.pl/index.php?IMEI=" + imeiX + "&IP=" + ipX; 
      } 
      //53543D303B44723D4E616F 
      else 
      { 
      url2 = comando;    
      url = "http://websitedummy.com.pl/index.php?data={\"IMEI\":\""+imeiX+"\",\"TS\":\"20/04/13-08:31:44\",\"SER\":\""+url2+"\"}";     

      } 



      try { 
       Thread.sleep(1000); 
       connection = (HttpConnection) Connector.open(url); 
       Thread.sleep(500); 
       connection.setRequestMethod(HttpConnection.GET); 
       Thread.sleep(500); 
       connection.setRequestProperty("Content-Type", "text/plain"); 

       Thread.sleep(500); 
       int con = 0; 
       try{ 
       con = connection.getResponseCode(); 
       } catch (Exception e4) 
       { 
        System.out.println(e4); 

       }     
       if (con == HttpConnection.HTTP_OK) { 
        System.out.println("Vamos"); 
        inputstream_ = connection.openInputStream(); 
        int ch; 
        while ((ch = inputstream_.read()) != -1) { 
         dataReceived.append((char) ch); 

        } 

        System.out.println("Atualizado."); 

        acabouatualizar=1; 

        inputstream_.close(); 
        connection.close(); 
       } else { 
        System.out.println("Error"); 
        // Connection not ok 
       } 
      } catch (Exception e) { 
       System.out.println("EXCEÇÂO 1 - " + e); 

      } finally { 
       if (inputstream_ != null) { 
        try { 

         inputstream_.close(); 

        } catch (Exception e1) { 
         System.out.println("EXCEÇÂO 2- " + e1); 
        } 
       } 
       if (connection == null) { 
        try { 
         System.out.println("Fechou conexao."); 
         connection.close(); 

        } catch (Exception e2) { 
         System.out.println("EXCEÇÂO 3- " + e2); 
        } 
       } 
      } 
      } 

爲了解決這個問題,我想清除連接中使用的所有變量。問題是我需要幾乎確定問題是什麼,因爲錯誤需要2天才能發生,這會花費我很多時間。

有什麼建議嗎? 謝謝你們。

+0

你能提供更多的堆棧跟蹤嗎? –

+0

不幸的是,這是我在當時唯一得到的輸出。 – kohhworlwide

+1

代碼中存在一些錯誤。由於您已經關閉了finally塊中的輸入流和連接,因此您不需要在if分支中關閉它們。 if(connection == null)if(connection!= null)。 –

回答

0

很難說是什麼原因造成outOfMemoryError異常,但有辦法處理它。這個問題的根本原因可以參考這個:

  1. JVM中沒有足夠的內存;
  2. 本地線程是不夠的,無法創建更多的線程;

您可以使用JConsole的這個問題,這是有一個看看內存,線程,類使用JVM中的工具來調試。此外,在某些情況下,異常消息可能會指出根本原因。