Java lang验证我的应用中对构造函数的调用错误

时间:2018-09-21 15:33:16

标签: android invocationtargetexception verifyerror

我以以下方式创建线程:

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

请注意,处理程序是静态处理程序对象,这可能会导致问题。我一直在这行代码中出现错误。但是,该错误不会在其他虚拟设备(例如API 23和25)以及我的物理设备(牛轧糖)中出现。

我确实尝试设置了一个try {} catch块,但是它没有捕获异常,这是不寻常的。堆栈跟踪如下:

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,我相信是通过传递参数static Handler创建的。我不知道为什么这会在API 19虚拟设备中发生,而不是在我测试过的其他虚拟设备中发生。

有什么想法或建议吗?

1 个答案:

答案 0 :(得分:0)

在阅读了许多文章之后,我遇到了以下想法:Thread类中的void run方法太复杂了。在run方法中定义的变量太多;对于包含超过4000行代码的方法,要做出的决定太多。以下是让我产生想法的帖子和答案: VerifyError - Verifier rejected class

所以,我要做的就是在Thread类中创建额外的方法,它们是 他们的工作等于run方法中的4000多行代码。

最后,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(){

}

}