2010-10-28 11 views
-1

我連接一個ıp凸輪(jpeg),並顯示此圖像,並ı不斷重複,過了一段時間我的應用程序錯誤這個。我測試了其他手機並展示了這款手機。我無法解決這個問題...(一段時間後,我的應用程序錯誤...)

10-28 15:12:51.525: ERROR/AndroidRuntime(675): Uncaught handler: thread Thread-11 exiting due to uncaught exception 

我的代碼:

public void parse(InputStream is){ 
    try { 
    if (!type.isMjpegStream()) { 
    CameraManagerScreen.ActiveCam.setConnected(true); 
    setImage(is); 
    is.close(); 
    System.gc(); 
    if(!mjpeghttp.isCanceled()) 
     go(); 
    } 
    } catch (Exception e) { 
    } 
} 

,我的連接是:

protected void connect() { 
InputStream is = null; 

try { 



HttpParams httpParameters = new BasicHttpParams(); 
// Set the timeout in milliseconds until a connection is 
// established. 
int timeoutConnection = 20000; 
HttpConnectionParams.setConnectionTimeout(httpParameters, 
    timeoutConnection); 
// Set the default socket timeout (SO_TIMEOUT) 
// in milliseconds which is the timeout for waiting for data. 
int timeoutSocket = 20000; 
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 

client = new DefaultHttpClient(httpParameters); 

method = new HttpGet(getUrl()); 
System.out.println("Baglanıyor: " + method.getURI().toString()); 
method.addHeader("Authorization", getBase64Encode()); 

res = client.execute(method); 
System.out.println("RESPONSE: " 
    + res.getStatusLine().getStatusCode()); 

is = res.getEntity().getContent(); 

if (!cancel) { 
    onReturn(res.getStatusLine().getStatusCode(), is); 

} 

} catch (Exception e) { 
System.out.println(e.getMessage()); 

try { 

    cancel = true; 

    Thread.sleep(60); 

} catch (Exception ie) { 
} 
onError(new Exception("0")); 
} 
} 

錯誤......

10-28 14:13:06.794: INFO/dalvikvm(3502): Stack overflow, expanding (0x439b0200 to 0x439b0000) 
10-28 14:13:06.794: INFO/dalvikvm(3502): Shrank stack (to 0x439b0200, curFrame is 0x439b0268) 
10-28 14:13:06.794: WARN/dalvikvm(3502): threadid=17: thread exiting with uncaught exception (group=0x4001b180) 
10-28 14:06:19.944: ERROR/AndroidRuntime(3420): Uncaught handler: thread Thread-11 exiting due to uncaught exception 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420): java.lang.StackOverflowError 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at java.util.Hashtable.get(Hashtable.java:274) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at java.util.Properties.getProperty(Properties.java:177) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at java.lang.System.getProperty(System.java:440) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at java.lang.System.getProperty(System.java:412) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at java.lang.Boolean.getBoolean(Boolean.java:174) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.harmony.luni.net.NetUtil$Action.run(NetUtil.java:89) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.harmony.luni.net.NetUtil$Action.run(NetUtil.java:80) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at java.security.AccessController.doPrivilegedImpl(AccessController.java:264) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at java.security.AccessController.doPrivileged(AccessController.java:84) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.harmony.luni.net.NetUtil.preferIPv4Stack(NetUtil.java:61) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:266) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at java.net.Socket.checkClosedAndCreate(Socket.java:889) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at java.net.Socket.connect(Socket.java:1036) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:140) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.connect(Http.java:75) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.connect(MjpegHttp.java:33) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.go(Http.java:46) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.CameraHttp.go(CameraHttp.java:13) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.go(Camera.java:121) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.parse(Camera.java:170) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.onReturn(MjpegHttp.java:23) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.connect(Http.java:82) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.connect(MjpegHttp.java:33) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.go(Http.java:46) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.CameraHttp.go(CameraHttp.java:13) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.go(Camera.java:121) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.parse(Camera.java:170) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.onReturn(MjpegHttp.java:23) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.connect(Http.java:82) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.connect(MjpegHttp.java:33) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.go(Http.java:46) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.CameraHttp.go(CameraHttp.java:13) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.go(Camera.java:121) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.parse(Camera.java:170) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.onReturn(MjpegHttp.java:23) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.connect(Http.java:82) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.connect(MjpegHttp.java:33) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.go(Http.java:46) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.CameraHttp.go(CameraHttp.java:13) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.go(Camera.java:121) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.parse(Camera.java:170) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.onReturn(MjpegHttp.java:23) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.connect(Http.java:82) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.connect(MjpegHttp.java:33) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.go(Http.java:46) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.CameraHttp.go(CameraHttp.java:13) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.go(Camera.java:121) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.parse(Camera.java:170) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.onReturn(MjpegHttp.java:23) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.connect(Http.java:82) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.MjpegHttp.connect(MjpegHttp.java:33) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.Http.go(Http.java:46) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.connection.CameraHttp.go(CameraHttp.java:13) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepvizyon.camera.Camera.go(Camera.java:121) 
    10-28 14:06:19.994: ERROR/AndroidRuntime(3420):  at spexco.cepviz 

回答

2
public void parse(InputStream is){ 
    if(!mjpeghttp.isCanceled()) 
     go(); 

究竟母鹿s go()呢?它要求connect(),什麼再次呼籲

if (!cancel) { 
    onReturn(res.getStatusLine().getStatusCode(), is); 
} 

而且onReturn()電話parse()parse()來電go()來電connect()來電onReturn()來電parse()來電...它從不(?)結束。爲什麼解析必須連接?每個函數調用都需要一點內存。大量的調用後,沒有更多的內存,你會得到一個堆棧溢出異常。

你需要在某個地方打破圓圈。你可以刪除此:

if(!mjpeghttp.isCanceled()) 
    go(); 

我不認爲它甚至睡一次

try { 

    cancel = true; 
    System.out.println("Sleep sleep!"); 
    Thread.sleep(60); 

} catch (Exception ie) { 

是否打印呢?


怎麼樣?

imageSet=false; 
while(!imageSet) 
{ 
    if (connect()) 
    if(parse()) 
     imageSet=true; 
} 
+0

解析不得不重新連接,因爲連接帶來的JPEG圖像,分析圖像設置。另一方面,我的處理程序將此圖像設置爲屏幕。總是一張圖片應該來... – atasoyh 2010-10-28 12:31:26

2

它看起來好像你一直保持嵌套調用,直到堆棧溢出(這個網站非常合適的問題= P)。

我猜你希望實際上有連接方法返回一個值,而不是調用onReturn方法。這會阻止你的遞歸嵌套,並應該擺脫這個特定的問題。

+0

謝謝。但爲什麼你認爲「這個網站非常合適的問題= P」)。「 – atasoyh 2010-10-28 12:34:40

+0

因爲這個站點叫做stackoverflow,所以你得到的錯誤是'stackoverflow'... – 2010-10-28 13:00:27

0

我解決這樣的..再次感謝您... :)當然我刪除
if(!mjpeghttp.isCanceled()) go();

// start connection to ip-camera 
public void go() { 

    if (mjpeghttp == null) { 
     mjpeghttp = new MjpegHttp(); 
     mjpeghttp.start(); 

    } 
    if (type.isMjpegStream()) { 
     mjpeghttp.go(this); 
    } else { 
     while (mjpeghttp.isCanceled()==false) 
      mjpeghttp.go(this); 
    } 

} 
相關問題