Java lang Verify ошибка в вызове конструктора в моем приложении - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю поток следующим образом:

GraphThread  thread = new GraphThread(context, handler, string);

Обратите внимание, что обработчиком является статический объект обработчика , который может вызывать проблему.Я получаю ошибку именно в этой строке кода.Но ошибка не появляется в других виртуальных устройствах, таких как API 23 и 25, а также в моем физическом устройстве (Nougat).

Я пытался настроить блок catch try {}, но этоне поймать исключение, что необычно.Трассировка стека выглядит следующим образом:

java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
        at android.view.View.performClick(View.java:4438)
        at android.view.View$PerformClick.run(View.java:18422)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException**
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick**(AppCompatViewInflater.java:384)
        at android.view.View.performClick(View.java:4438) 
        at android.view.View$PerformClick.run(View.java:18422) 
        at android.os.Handler.handleCallback(Handler.java:733) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5017) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
        at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.VerifyError: noodlesoup/solver/GraphThready
        at noodlesoup.solver.MainActivity.clikButton(MainActivity.java:4985)

Все сводится к java.lang Verifyerror, который, я считаю, создается путем передачи параметра статического обработчика.Я не знаю, почему это происходит в виртуальном устройстве API 19, а не в другом виртуальном устройстве, которое я протестировал.

Есть идеи или предложения?

1 Ответ

0 голосов
/ 28 сентября 2018

Прочитав много постов, я натолкнулся на следующую идею: метод void run в моем классе Thread был слишком сложным.Было слишком много переменных, определенных внутри метода run;Было слишком много решений для метода, который содержал более 4000 строк кода.Сообщение и ответ, которые дали мне идею, были следующие VerifyError - Verifier отклонил класс

Итак, все, что мне нужно было сделать, это создатьдополнительные методы в классе Thread, в которых сумма их работы была равна 4000+ строк кода внутри метода run.

В конце структура класса Thread выглядит следующим образом и компилируется без дополнительной проверки.ошибки:

public class GraphThready extends Thread{
//...
GraphThready(){
//...
}

public void run(){

super.run();

if(some condition)
methodToDoTask1();

if(another condition)
methodToDoTask2();

if(a different condition)
methodToDoTask3();

}

private void methodToDoTask1(){

}


private void methodToDoTask2(){

}

private void methodToDoTask3(){

}

}
...