2014-06-19 2 views
0

결과 처리기를 사용하여 HashMap에서 정보를 추출하려고합니다. 결과 result = result.fromContent (co); System.out.println (co.toString()); System.out.println (result.get ("propertyType [text() = 'Image'/ .."). toString());왜 codenameone 결과 프로세서를 사용할 때 메모리 부족 오류가 발생합니까?

실행하면 출력됩니다. 메모리 부족 오류는 즉시 발생하지 않으며 실제로 실행중인 다른 코드는 없습니다.

{ 

"화상": { "propertyName 형식": "사진", "propertyType": "이미지", "는 PropertyValue": "/var/folders/_j/xsgymcmd1lsc5zqtg65ctlsm0000gn/T/temp7922678673908500238s.png " }, "의 DocumentType ": { "propertyName 형식 ":"DocumentType는 " "propertyType ":"텍스트 ", "는 PropertyValue ":"사고 " } } 을 {사진 = {propertyName 형식 = 사진, propertyType = Image, propertyValue =/var/folders/_j/xsgymcmd1lsc5zqtg65ctlsm0000gn/T/temp7922678673908500238s.png}, DocumentType = {propertyName 형식 = DocumentType는, propertyType = 텍스트,는 PropertyValue = 사고}}

java.lang.OutOfMemoryError와 : Java 힙 공간 java.util.Arrays.copyOf (Arrays.java:2367)에서 java.lang.AbstractStringBuilder에서 java.lang.StringBuffer.append에서 java.lang.AbstractStringBuilder.append (AbstractStringBuilder.java:587) 에서 java.lang.AbstractStringBuilder.ensureCapacityInternal (AbstractStringBuilder.java:114) 에서 .expandCapacity (AbstractStringBuilder.java:130) (StringBuffer.java:332) at com.codename1.processing.ResultTokenizer.getPredicate (ResultTokenizer.java:124) at com.codename1.processing.ResultTokenizer.next (ResultTokenizer.java:137) at com.codename1.processing.ResultTokenizer.tokenize (ResultTokenizer.java:77) at com.codename1.processing.Result._internalGetAsArray (Result.java:860) at com.codename1.processing.Result._internalGet (Result. java : 556) at com.codename1.processing.Result.get (Result.java:540) at com.ixzdore.icomplain.ComplainManager.saveComplainObject (ComplainManager.java:23) at userclasses.StateMachine.onEditorSave (StateMachine. java : 299) at generated.StateMachineBase.processCommand (StateMachineBase.java:228) at com.codename1.ui.util.UIBuilder.processCommandImpl (UIBuilder.java:1634) at com.codename1.ui.util.UIBuilder. $ 100 액세스 (UIBuilder.java:85) at com.codename1.ui.util.UIBuilder $ FormListener.actionPerformed (UIBuilder.java:2757) com.codename1.ui.util.EventDispatcher.fireActionEvent (EventDispatcher.java:345) at com.codename1.ui.Form.actionCommandImpl (Form.java:1305) at com.codename1. uu.Form.dispatchCommand (Form.java:1271) at com.codename1.ui.SideMenuBar $ CommandWrapper $ ShowWaiter.run (SideMenuBar.java:1381) at com.codename1.ui.Display.processSerialCalls (Display.java : 1075) com.codename1.ui.Display.edtLoopImpl (Display.java:1019) 에서 com.codename1.ui.Display.mainEDTLoop (Display.java:925) at com.codename1.ui.RunnableWrapper.run (RunnableWrapper.java:120) at com.codename1.impl.CodenameOneThread.run (CodenameOneThread.java:176)

답변

0

메모리 부족은 종종 재귀를 나타냅니다. 지도에 자체 또는 자녀 중 하나에 대한 참조가 포함되어 있습니까?

그런 경우 코드가 깊고 깊게 파고 들며 루프를 끝냅니다. 디버거 중단 점으로 멈추고지도의 자식을 검사하여 그 중 아무 것도 무한히 반복되지 않는지 확인하는 것이 좋습니다.

+0

지도를 json 문자열로 바꿔서 같은 결과를 얻었습니다. 확실히 재귀가 없습니다. – user1622343

+0

get 호출로 스택을 잘못 읽었습니다. 나는 표현 언어에서 뭔가가 여기에서 작동하지 않는 것 같아요. 그러나 나는 무엇이 확실하지 않습니다. 나는 그 기능을 자주 사용하지 않고 Map을 그냥 지나친 다. –

+0

오 잘. 결과가 잘 작동하지 않는 것 같습니다. 나는지도를 지나갈 것이다. – user1622343

관련 문제