首页 > 编程语言 >java.lang.NoSuchMethodError的不明崩溃问题

java.lang.NoSuchMethodError的不明崩溃问题

时间:2024-05-08 14:59:37浏览次数:22  
标签:lang return Log 18 NoSuchMethodError java UWA class

1)java.lang.NoSuchMethodError的不明崩溃问题
2)微信小游戏有可行的分析Mono内存的方法吗
3)游戏运行中,从对象池里拿Item时动态设置物体锚点,导致DC成倍增加
4)Scriptable Build Pipeline打包Scritptable Object报错


这是第384篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:793972859

Crash

Q:最近被Android的一个崩溃搞得毫无头绪。烦请各位大佬帮忙指导分析一下。

这里是从Bugly截取的最后一段崩溃日志,Unity线程运行良好。然后一个不知名线程突然就报了一个java.lang.NoSuchMethodError的崩溃,更奇怪的找不到函数名name='Thread-37' ,来源文件也是Unknown Source。

19404-18 15:18:27.898 21248 21470 I Unity : CreateScene sceneInst complete 2
19504-18 15:18:27.911 21248 21470 I Unity : Lod level: 1
19604-18 15:18:28.264 21248 22705 W Unity : ! parseType; T is not known!
197--------- beginning of crash
19804-18 15:18:28.282 21248 22705 E AndroidRuntime: FATAL EXCEPTION: Thread-37
19904-18 15:18:28.282 21248 22705 E AndroidRuntime: Process: com.readygo.barrel.gp, PID: 21248
20004-18 15:18:28.282 21248 22705 E AndroidRuntime: java.lang.NoSuchMethodError: no non-static method with name='Thread-37' signature='Thread-37' in class Ljava.lang.Object;
20104-18 15:18:28.282 21248 22705 E AndroidRuntime: at com.unity3d.player.ReflectionHelper.getMethodID(Unknown Source:162)

这个大概会是什么问题呢?全网搜遍没有类似的问题。

同时,此问题在GooglePlay后台报的崩溃错误如下:

 

初始是怀疑第三方库导致,但是和公司同项目组比较过。使用同样的第三方库的项目并没有出现类似崩溃。

所以请问有没有类似的问题经验或者思路启发?非常感谢。

A1:目前使用了一些简单的方法,此问题算是绕过了。应该是给Java层传递某个动作的时候,sig里传入了一个‘T',底层并没有处理这个T导致,但是不知道为什么会传入,确定没有调用任何Java的函数,没有任何的JNI调用。此问题暂时总结到这里吧,以后有高手遇到此问题,可以深挖。

程序报错出自:ReflectionHelper.java中:

if (Log.LOG_WARN) Log.Log(Log.WARN, "! parseType; " + c + " is not known!");

  

伪代码如下:

private static Class<?> parseType(String sig, int[] sigPos)
   {
       if (Log.LOG_VERBOSE && LOGV) Log.Log(Log.VERBOSE, "- parse '" + sig + "' at " + sigPos[0]);
       while(sigPos[0] < sig.length())
       {
           char c = sig.charAt(sigPos[0]++);
           if (c == '(')
               continue;
           else if (c == ')')
               continue;

           if (c == 'L')
           {
               int end = sig.indexOf(';', sigPos[0]);
               if (end == -1)
                   break;

               String typeName = sig.substring(sigPos[0], end);
               sigPos[0] = end+1;

               typeName = typeName.replace('/', '.');
               if (Log.LOG_VERBOSE && LOGV) Log.Log(Log.VERBOSE, "- typename = " + typeName);

               Class<?> t;
               try {
                   t = Class.forName(typeName);
               } catch (ClassNotFoundException e) {
                   if (Log.LOG_VERBOSE && LOGV) Log.Log(Log.VERBOSE, e.toString());
                   break;
               }

               return t;
            }

           if (c == 'Z') return boolean.class
               ;
           if (c == 'I') return int.class
               ;
           if (c == 'F') return float.class
               ;
           if (c == 'V') return void.class
               ;
           if (c == 'B') return byte.class
               ;
           if (c == 'C') return char.class
               ;
           if (c == 'S') return short.class
               ;
           if (c == 'J') return long.class
               ;
           if (c == 'D') return double.class
               ;

           if(c == '[')
           {
               Class<?> type = parseType(sig, sigPos);
               return Array.newInstance(type, 0).getClass();
           }

           if (Log.LOG_WARN) Log.Log(Log.WARN, "! parseType; " + c + " is not known!");

           break;
       }
       return null;

  

感谢题主beginner@UWA问答社区提供了回答

A2:可以看下这个链接:
https://rollbar.com/blog/how-to-fix-java-lang-nosuchmethoderror-in-java/

感谢Xh6LLqqaaoVb@UWA问答社区提供了回答

A3:针对A2提供的解答,虽然提示java.lang.NoSuchMethodError,但实际上并不是NoSuchMethodError,感觉是开启线程的时候崩溃了。此问题真的很诡异,目前基本确定了问题是和线程有关系的。

感谢题主beginner@UWA问答社区提供了回答


WebGL

Q:微信小游戏有什么可行的分析Mono内存的方法吗?Memory Profiler一抓帧就卡死。

欢迎有经验的朋友转至社区交流:
https://answer.uwa4d.com/question/6627973d5c7f5d2c5805d3b6


UI

Q:游戏运行中,从对象池里拿Item时候动态设置物体锚点,导致DC成倍增加,为什么动态设置锚点会影响DC呢?

A:通过UGUI查是否合批通过Profiler的UI Module最方便。

感谢Wenbo@UWA问答社区提供了回答


AssetBundle

Q:1. 发生了什么?

给定一个自定义可编写脚本的对象,它有一个类似于MyScriptableObject m_RefObject的字段,创建3个名为A、B、C的对象。

C引用B、B引用A,使用SBP CompatibilityBuildPipeline.BuildAssetBundles将3个资产构建为单独的捆绑包。

加载捆绑包A、B、C,加载资产A、B、C。A和B加载成功,而加载C失败,导致警告“The referenced script on this Behaviour (Game Object '') is missing!'' 并返回 null。

切换到UnityEditor.BuildPipeline.BuildAssetBundles,A、B、C 均加载成功。

2. 如何使用所附示例重现它?

打开示例场景并单击“播放”,控制台将显示资源加载失败,所有行为均在Entry.cs内。

使用版本:
com.unity.scriptablebuildpipeline: 1.20.2/ 1.21.9
Unity 2021.3.25f1

有没有人遇到过这个问题,怎么解决?

欢迎有经验的朋友转至社区交流:
https://answer.uwa4d.com/question/661364835c7f5d2c5805d394

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859

标签:lang,return,Log,18,NoSuchMethodError,java,UWA,class
From: https://www.cnblogs.com/uwatech/p/18179736

相关文章

  • Cannot resolve method 'and(java.util.function.Predicate<java.lang.String>)
    springboot整合knife4j报错,提示找不到该方法,用的knife4j依赖是最新版本解决方法:将knife4j版本进行降级处理,这里采用2.0.4......
  • 为javaweb项目中的所有jsp页面设置相同字符集
    配置web.xml文件<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/......
  • 蛇形变量名(nake_case)速转驼峰变量名(camelCase)__Java
    最近遇到当JavaBean不遵循驼峰命名规则时,使用反射赋值失败。但是我的类中属性个数非常多(一个一个改也太恼火了),因此写了个将蛇形变量名转驼峰变量名的方法,在此分享出来供大家使用。publicstaticvoidconvertToCamelCase(Objectobj){Class<?>clazz=obj.getClas......
  • Matplot3D for JAVA 【V5.0】发布 :一个纯JAVA开发的数学科学数据可视化组件,JAVA 三维
    ​ Matplot3DforJAVA概述 在数据科学和工程领域,数据可视化是理解和交流复杂信息的关键工具。如果您是一位Java开发者,寻找一个强大的、本地化的三维图形绘图库,那么Matplot3DforJAVA(V5.0)值得你关注。该组件旨在为Java开发者提供类似于Python中Matplotlib的三维绘图功能,让Jav......
  • java虚拟机内存结构——类加载器,运行时数据区,执行引擎,本地方法接口。《深入理解JAVA虚
    ##类加载器类加载器当Java程序需要使用某个类时,类加载子系统负责找到对应的.class文件,并将其加载到JVM的方法区中每一个类加载器,都拥有一个独立的类名称空间。只有在这两个类是由同一个类加载器加载的前提下才有意义##运行时数据区###线程共享####堆:内......
  • Golang gin 框架使用 MongoDB 进行多表联查,以及分组查询
    主要针对gin框架中如何使用假设两张表order表{"_id":ObjectId("65aa2b2203abce203bbe3c7a"),"name":"骆驼祥子","route":"/test/v2/desktop","bookshelf":"03"}orderRemark表{......
  • JavaScript中指定大小分割数组的一种实现
    今天分享一个使用JavaScript分割数组为多个自数组的方法实现。我使用它的场景如下:给定一个数组arr和指定大小fixed:constarr=[ { id:1, name:'name1' }, { id:2, name:'name2' }, { id:3, name:'name3' }, { id:4, name:'name4' }, { ......
  • java的三种编译(JAVAC,JIT,AOT)
    1.javac把java代码编译成字节码(中间代码),然后由java虚拟机解释执行2.jit(运行时编译)把java代码直接编译成机器码,然后由java虚拟机直接运行(缓存)。有对客户端的C1和对服务器端的C2编译器缓存代码优化逃逸分析,是否超出范围。对不同逃逸状态做优化全局逃逸对象超出了方法或线......
  • 「Java开发指南」如何用MyEclipse搭建GWT 2.1和Spring?(一)
    本教程将指导您如何生成一个可运行的GoogleWebToolkit(GWT)2.1和Spring应用程序,该应用程序为域模型实现了CRUD应用程序模式。在本教程中,您将学习如何:安装GoogleEclipse插件为GWT配置一个项目搭建从数据库表到一个现有的项目GWT编译部署应用程序注意:自定义Spring代码......
  • java异常报警
    `@Component@Aspect@Slf4jpublicclassServiceExceptionHandler{@ResourceExceptionWarnSendsend;//Service层切点@Pointcut("@annotation(mrh.com.modules.app.annotation.ServiceJobExcepCatch)")publicvoidserviceAspect(){}//全局异常注解@Around(&......