2013-06-07 2 views
1

Google 개발자 콘솔의 오류보고 페이지가 정말 이상합니다.예외 java.lang.NoSuchMethodError on java.util.Deque.push

내 Android 용 응용 프로그램에서 내 응용 프로그램이 충돌하는 것 같습니다. 제공하는 예외 로그는 말한다 : 그 라이브러리를 사용하고

java.lang.NoSuchMethodError: java.util.Deque.push 
at com.larvalabs.svgandroid.SVGParser$SVGHandler.<init>(SVGParser.java:869) 
at com.larvalabs.svgandroid.SVGBuilder.build(SVGBuilder.java:147) 
at myapp.graphic.PictureCache.getSvgPicture(PictureCache.java:59) 
at myapp.graphic.PictureCache.getSvgPictureDrawable(PictureCache.java:65) 
at myapp.activities.startup.ActivityStartup.setupCustomGraphic(ActivityStartup.java:92) 
at myapp.activities.startup.ActivityStartup.onCreate(ActivityStartup.java:35) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069) 
... 

:

http://code.google.com/p/svg-android-2/

은 단순히 외부 라이브러리를 연결되지 소스 대구를 포함.

코드가 java.util.Deque.push (NoSuchMethodError)에 실패한 것 같습니다. 그것은 내가 복사하고 붙여 넣은 소스 코드의 문제가 아니며, 그것은 런타임에 dequeue 메소드가 발견되지 않는 것 같습니다! 어떻게 가능할까요? 상상할 수 없다.

편집 :

Deque<Matrix> matrixStack = new LinkedList<Matrix>(); 

문제 제기 코드 :

matrixStack.push(new Matrix()); 

new Matrix()push()에 의해 허용되지 않는 값을 반환하는 것이 가능인가요을 양단 큐 정의입니다 방법?

+1

ad22를 rev 22로 업데이트 했습니까? 그렇다면 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오. java build path 주문 내보내기 탭을 선택하십시오. 프로젝트와 안드로이드 프로젝트 모두에 대해 안드로이드 전용 라이브러리를 선택했는지 확인하십시오. 이것은 단지 제안 일뿐입니다. – Raghunandan

+0

java.util.Deque.push가 Java.6에 도입 된 것처럼 보이며 이전 버전에서는 제공되지 않을 수 있습니다. 응용 프로그램이 실패한 장치에서 런타임 환경을 확인하는 것이 좋습니다. –

+1

@scubadiver 그러나 대기 ...'Deque'는 Java 5에도 존재하지 않았으므로 Java 6보다 오래된 버전에서는'java.lang.NoClassDefFoundError : java.util.Deque'로 실패합니다. 아마도 Android 라이브러리는 Java 6 또는 7이지만'push' 메소드는 포함되어 있지 않습니다. – gparyani

답변

1

도움이되기를 바랍니다, 샘플 코드 < (9) 이 Class/메소드를 호출 할 수 없으므로 실패합니다.

+0

내 manifest.xml에 android : minSdkVersion = "8"and android : minSdkVersion = "8"이 있는데 컴파일/오류 (Android 2.3.3 라이브러리 사용)가 표시되지 않습니다! –

+0

JDK에도 Deque가 있습니다 (이후 1.6), 이것이 아마도 당신에게 경고하지 않는 이유입니다. 런타임에서는 장치가 9보다 작 으면 실패합니다. 나는 경고가 어떻게 작동하는지에 대한 전문가가 아니다. 나는 이것이 당신의 문제라고 꽤 확신합니다. API 수준이 9 미만인 기기에서 테스트 해 보셨습니까? –

+0

android : minSdkVersion = "8"android : targetSdkVersion = "8"인 경우 Android 2.3.3 (Api 9) 라이브러리를 사용하기 때문에 문제가 발생합니다. 해결 : android : minSdkVersion = "9"android : targetSdkVersion = "9"로 설정하여 Ken이 기여한 후에 해결되었습니다. –

0

Dequeu.push (Ee)에는 오브젝트 유형 인수가 삽입되어야합니다.
Dequeu 선언은 괜찮지 만 _ _.push (new Matrix())에 문제가 발생합니다., br. 푸시 할 데이터 필드가 있으므로 데이터 필드를 보유하는의 인스턴스를 선언하고 Deque로 푸시합니다. 여기

은 당신의 프로젝트는 API 레벨 9

(http://developer.android.com/reference/java/util/Deque.html)

장치 API 수준에서 추가되었다 java.util.Deque를 참조

import java.util.*; 

public class DequeExample { 
    private static Matrix matrix = new Matrix(); 
    private static Deque<Matrix> deque = new LinkedList<Matrix>(); 

    public static void main(String[] args) { 
     for (int i = 0; i < 10; i++) { 
      matrix.setValues(i * i, (float)Math.pow(i, 5.6f), new String("String " + Integer.toString(i))); 
      deque.push(matrix); 
     } 

     System.out.println(deque.size()); 
    } 

    static class Matrix { 
     private int i = 0; 
     private float j = 0f; 
     private String k = "null"; 

     public void setValues(int _i, float _j, String _k) { 
      matrix.i = _i; 
      matrix.j = _j; 
      matrix.k = _k; 
     } 
    } 
} 
관련 문제