android开发当中碰到的有关问题-app开发实践(2)

android开发当中碰到的问题--app开发实践(2)

在debug的时候,报如下错误:

# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (classFileParser.cpp:3494), pid=5940, tid=5632
#  Error: ShouldNotReachHere()
然后就是什么socket连接出错之类的,

网上搜了一下,网上搜索全文如下,

今天早上写了个注册的功能,使用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方法的类。

 

 

原文链接:http://hi.baidu.com/%CE%D2%BA%DC%B0%AE%D5%C5%B2%AE%C2%D7/blog/item/05479dfc1e5de30509244d8f.html/cmtid/364d49d88687022310df9b65

 

 

虽然知道原因了,但是我在我的项目中还是找不到main方法,解决办法如下:

选择Run-> Run Configurations -> Android Application -> Android 标签页 -> 选择launch  Action ->选择第二个选项:

 

android开发当中碰到的有关问题-app开发实践(2)

lauch:选择指定的activity

 

 

设置完成,再debug就没有问题了

 

为什么没有main函数了,但是还是会报错,然后选择指定的activity就可以了呢?我思考的原因如下,因为昨天,为了测试一个用例,我写了个main函数,但是后来我又删除掉了,可能在这个时间内,由于eclipse运行的时候选择的是默认的activity,而且记住了这个main函数(即时我删除掉了),因此我在后面的时候,每次运行由于socket已经被main函数占用了,都会报错,而由于我又重新设置了lauch Action, 选择了指定的activity,所以再运行就不报错了。

 

另外,如果不是上述的原因,可能是配置的多个Java Application或者Android Application都指向了同一个Project,所以报错,解决办法就是选择Run-> Run Configurations -> Android Application 或者选择Run-> Run Configurations -> JAVA Application把指向同一个Project的Application都删除掉,就可以了。