2010-10-28 3 views
-1

Je me connecte un ıp cam (jpeg), et montre cette image, et je répète continuellement, Après un certain temps mon erreur d'application ce. Et j'ai testé un autre téléphone et montré celui-ci.Je ne peux pas résoudre ce problème ... (Après un certain temps mon erreur d'application ce ...)

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

mes codes:

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) { 
    } 
} 

et ma connexion est:

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")); 
} 
} 

... Erreur

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 

Répondre

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

Qu'est-doe exactement s go() faire? Il appelle connect(), ce qui appelle

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

Et onReturn() appels parse() à nouveau. parse() appels go() appels connect() appels onReturn() appels parse() appels ... Il ne se termine jamais (?). Pourquoi l'analyse doit-elle se connecter? Chaque appel de fonction nécessite un peu de mémoire. Après beaucoup d'appels, il ne reste plus de mémoire et vous obtenez une exception de dépassement de pile.

Vous devez casser le cercle où. Vous pouvez supprimer ceci:

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

Je ne pense pas qu'il dort même une fois

try { 

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

} catch (Exception ie) { 

-t-il imprimer du tout?


Et alors?

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

parsing doivent se connecter à nouveau, car de connexion apporte l'image jpeg, analyser l'image ensembles. D'un autre côté, mon gestionnaire met cette image à l'écran. Toujours une photo devrait être à venir ... – atasoyh

2

Il semble que vous gardez des appels de nidification à plusieurs reprises jusqu'à ce que les débordements de pile (problème très approprié pour ce site = P).

Je suppose que vous voulez réellement que les méthodes de connexion retournent une valeur au lieu d'appeler une méthode onReturn. Cela empêcherait votre imbrication récursive et devrait vous débarrasser de ce problème particulier.

+0

merci. Mais pourquoi avez-vous pensé "problème très approprié pour ce site = P)." – atasoyh

+0

Parce que le site s'appelle stackoverflow, et l'erreur que vous obtenez est 'stackoverflow' ... –

0

je résous comme ça .. Merci encore ... :) Absolument je supprimer
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); 
    } 

} 
Questions connexes