今天早上写了个注册的功能,使用socket实现。但是运行的时候,爆出了一个很诡异的错误,一般的错误应该是用红色的打印出错误的路径。但是这次错误貌似很严重,是一个内部的错误,好像是虚拟机内部的实现的异常,因为指示出来的是一个cpp文件的错误。报错全文如下:
# A fatal error has been detected by the Java Runtime Environment:## Internal Error (classFileParser.cpp:3161), pid=3464, tid=2324# Error: ShouldNotReachHere()## JRE version: 6.0_21-b07# Java VM: Java HotSpot(TM) Client VM (17.0-b17 mixed mode windows-x86 )# An error report file with more information is saved as:# C:\Users\Andy\workspace\huaqibei\hs_err_pid3464.log## If you would like to submit a bug report, please visit:# http://java.sun.com/webapps/bugreport/crash.jsp#这个问题出现的情况是,我在普通的用户界面的程序中添加了一个客户端的socket,进行用户的注册。google了很久,看到一些说是因为Android的ADT实现的JUnit不行,需要改换成java的JUnit测试,但是我这边根本没有用到单元测试的部分。郁闷了好久,到底是怎么回事呢?下午高了半天,半天的宝贵时间啊,还是没解决。晚上看到她在线,狂喜,和她聊天。聊了一会,她下了。突然有了灵感,会不会是因为我写在项目中的server部分有问题,因为server部分有自己的main方法,也就是说在Android项目中既有启动应用程序的activity也有启动java程序的main方法。所以,run的时候,就出现了问题了,此时java应用程序也就是server要启动自己的main方法,但是Android需要启动自己的activity,这时候就没办法做出选择了。(或许,这个是Android的一个bug吧)。然后,我就把server移出Android项目(正确的做法就是应该这样,将他们放在一起是不对的,服务器端课客户端显然不能放在一起),就是将main方法的类移出来,果然程序可以正确执行了。现在我需要验证我的想法,是不是因为main方法的问题呢?于是我在Android客户端项目中添加了一个带有main方法的输出helloworld的类,果然出现的相同的错误,基本验证了自己的想法,但是不知道为什么这样。结论教训:在Android项目中不能同时写带有java中的main方法的类。