2016-12-01 7 views
1

In meinem Codename One-Anwendung, die (Android) Native Interface Implementierung beinhaltet, ich auf dem Gerät von Zeit zu Zeit eine ConcurrentModificationException erhalten die Spur stapeln liest:ConcurrentModificationException in Codename One App

W/System.err: java.util.ConcurrentModificationException 
W/System.err:  at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573) 
W/System.err:  at com.codename1.impl.android.AndroidAsyncView.flushGraphics(AndroidAsyncView.java:380) 
W/System.err:  at com.codename1.impl.android.AndroidImplementation.flushGraphics(AndroidImplementation.java:1147) 
W/System.err:  at com.codename1.impl.CodenameOneImplementation.paintDirty(CodenameOneImplementation.java:580) 
W/System.err:  at com.codename1.ui.Display.edtLoopImpl(Display.java:1075) 
W/System.err:  at com.codename1.ui.Display.mainEDTLoop(Display.java:997) 
W/System.err:  at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 
W/System.err:  at com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60) 
W/System.err:  at java.lang.Thread.run(Thread.java:841) 

Mein Code (Codename One Teil oder die native Interface-Implementierung) verwendet nicht ArrayList und die App kann nach dem Klicken auf OK fortsetzen, wenn der 'Interner Fehler' erscheint, aber ich möchte diesen Fehler vermeiden.

Wo soll ich schauen, um diesen Fehler zu vermeiden?

Alle schätzten Hilfe sehr

Antwort

1

Dieser Code bedeutet, aus irgendeinem Grund auf einem separaten Thread eine native repaint auslöst. Nutzt Ihr systemeigener Code, der mit der Peer-Komponente interagiert, den nativen Benutzeroberflächen-Thread von Android?

Wenn nicht, kann das eine Race Condition auslösen.

+0

Im nativen Code ruft 'AndroidImplementation.runOnUiThreadAndBlock()' auf, um die Kamera und ihre Vorschau zu starten, was für mich Sinn macht, da dieser Codeblock tatsächlich die Benutzeroberfläche verändert. Später ruft der Code "AndroidImplementation.runOnUiThreadAndBlock()" erneut auf, um die Helligkeit der Ansicht festzulegen. Bitte beachten Sie, dass seit die Änderungen in diesem [post] (http://stackoverflow.com/a/40916205/6351897) vorgenommen wurden, die Ausnahme weg ist. Macht das für dich Sinn @ Shai? – HelloWorld

+0

Das könnte einen Sinn ergeben, obwohl es schwer ist zu beurteilen, ob der "und Block" -Abschnitt korrekt ist, ohne tief in den Code zu graben. –