在Android项目中实现Socket通信,服务器端使用main方法创建ServerSocket,运行启动服务器时报错“Error: ShouldNotReachHere() ”。
原因分析:java中使用main函数作为应用程序的接口,class的生命周期始于main方法,终于main方法。Android虽然使用的是java语法,但是却不使用main作为程序入口,一个activity启动时要经过onCreate()方法、onStart()方法和onResume()方法才算完全启动,而且这些方法都是自动调用的,这是与java application运行的最大不同处。所以如果你新建的是Android Project,那么程序默认使用的就是android.jar来作为程序运行时环境,但是由于我们按照惯例将服务器端ServerSocket的启动放在main方法中,android无法解析,所以会报出“Error: ShouldNotReachHere() ”错误,就是说程序永远不会执行到这里,这种错误平时也常见,比如说你在定义了一条return语句后又在后面加上一句System.out.println("xxxx")一样,return表示程序已经结束,后面那句System是永远无法执行的,因为按照java语法程序无法被解析。
解决方案一:隔离服务器端和客户端。将服务器端ServerSocket的创建移到Android项目之外的一个Java Project中,先运行这个Java Project,启动ServerSocket,再运行客户端所在的Android Project。
解决方案二:更改服务器端运行时环境。将ServerSocket依旧写在Java类中的main方法中,在IDE左边的Package Exployer中选中项目,点击鼠标右键,选择“Run as——>Run configuration”,在弹出窗口的左边框内找到“Java application——>ServerSocket类”,在右边框内找到Classpath选项,找到其中的Bootstrap Entries,选中其中的android.jar,点击右边remove按钮将其删除,然后点击Advanced按钮,选择Add Libaby选项,点击ok按钮,在弹出的对话框中选择JRE System Library,点击“next”按钮,选择Workplace Default JRE选项,点击“finish”按钮即可完成配置。
解决方案三:使用Android中的Activity创建服务器ServerSocket。这种方案应该将服务器和客户端都写在同一个Activity中的不同方法中,先启动服务器方法,再启动客户端方法。这是因为Android中一个Activity就代表了一个屏幕,如果你将服务器和客户端写在不同的Activity中,先启动服务器Activity,再跳转到客户端Activity,那么服务器Activity就会执行onPause()回调方法,相当于关闭Socket服务器了。
解决方案四:使用Android中的Service创建服务器ServerSocket。创建一个Service用来存放Socket服务器代码,再创建一个Activity来存放Socket客户端代码和显示通信信息。运行时先通过Activity启动Service,再启动客户端代码的Activity。由于Android中的Service是后台运行,所以即使跳转Activity也不会关闭服务。
这四种方案中,第一种将服务器和客户端分隔在不同项目中,不利于管理;第三种方案将客户端和服务器代码写在同一个类中,显得杂乱而且不符合实际情况。个人觉得可取的是第二种和第四种方案,特别是第四种方案。第二种方案夹杂了Android和Java环境处理,第四种方案则是纯粹的Android应用,而且用到了Android中的Service,“Service——Activity”更符合Socket的“服务器——客户端”模式。
以上文章是從網絡上搜索出來的,本人已經測試了第二種方案,可以通過;
具體做法就是:
(1)右鍵 入口類(含有Main方法的)==>Run Configurations==>雙擊(Java Application)==>New==>
(2)在標籤Main里選好相應的ProjectName和要運行ClassName,
(3)選標籤ClassPath中的Bootstrap Entries ,再從右邊點 Advance==>Add Library==>JRE System Library,完成,然後將JRE System Library 點中再點 Up按鈕,OK了
分享到:
相关推荐
Chapter 1 Android Overview Android Overview History Android Versions Android Flavors Summary Chapter 2 Java Review Comments Data Types: Primitives and Objects Modifiers Arrays Operators Control Flow ...
} } 发现居然也能调用成功,当时很惊讶,反射机制平时在以前的项目中也常使用,但不能构造只有私有构造函数的类。 自己做了一个简单例子: package study.spring.bean; import java.lang.reflect.Constructor; ...
� 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要快很多。 � 运营商(中国移动等)的大力支持,产业链条的热捧。 � 良好的盈利模式( 3/7 开),产业链条的各方:运营商、...
【android-support-v7-appcompat】 这个项目,可作为 Library 直接在 ADT中 被其他项目引用。 【顺便解决问题1 】 12-17 16:30:16.899 22855-22855/? E/AndroidRuntime: FATAL EXCEPTION: main Process: ...
//将下面第3.)至第5.)步的代码片段放到eclipse创建android项目时自动产生的MainAcitivity.java中就可以了 3.) 在Java Activity代码中添加对这个jni的调用 (本例中是MainActivity.java ): static { System....
Android 应用程序是用 Java 编程语言编写的,它们在一个虚拟机(VM)中运行。需要注意的是,这个 VM 并非您想象中的 JVM,而是 Dalvik Virtual Machine,这是一种开源技术。每个 Android 应用程序都在 Dalvik VM 的...
mqtt java版本的源码,版本号1.2.0,有兴趣的可以下载,mqtt广泛用于物联网,智能家居,...4.在moudle的main目录下创建resources目录(New > Folder > Java Resources Folder) 5.将nls的资源文件copy至resources即可
androidtest ——这是一个Android的简单测试工程,好像是需要先安装android目录中的应用才能运行 core ——这是核心代码 其它文件夹都用不到的。。。 第一步: 下面将android目录下的工程带入Eclipse 包名:...
本文针对以上问题和实际工作需要,基于Android平台,采用Google Android SDK和JAVA Eclipse等作为开发工具,设计并实现了哈尔滨招行Android手机银行汇率换算模块。该模块使用了中国人民银行网上提供的最新实时的汇率,...
Android Eclipse生成器 一个Gradle插件,可以生成Eclipse项目文件(.... src/main/java build/generated/source/r/debug build/generated/source/buildConfig/debug build/generated/source/aidl/debug 对于打包为
This project is set up as a single Eclipse project with a Main.java example activity. AAC encoding logic is found in jni/aac-enc.c, which needs to be built with the Android NDK. I used NDK r7c, but ...
1.Activity Activity就是一个用户可以直接接触并看到的窗口,当新建一个Android Project后可以 看到在工程文件下的src中有一个已建好的java类FirstActivity,系统也会自动为他配 备一个布局文件main.xml ,并在...
图1 App1运行的界面 图2 App2 运行结果 App1:记录应用程序的使用次数,/com.Test/UseCount.java程序如下,补充程序中所缺 代码: "import android.app.Activity; " "import android.content.SharedPreferences; " ...
ROXIMITY SDK示例,用于基于Android Studio和Eclipse的实现 快速开始 Android Studio “ git clone :roximity / ROXIMITYSDKStarterKit-Android.git” 开启Android Studio 选择“打开现有的Android Studio项目...
WebView演示Android应用程序一个简单的Android应用程序,允许您在WebView中加载URL。 WebView侦听两个事件: userCreated事件:记录电话号码和用户令牌userReady事件:关闭WebView代码大多数逻辑在文件MainActivity....
将源码复制到eclipse java项目下 在main方法中 修改相应的尺寸 即可生成相应的values-480*320 values-800*480 等尺寸文件
在论坛里看到一篇 "MapView和其它控件一起显示 " 的帖子, 那是很老的一篇帖子了, 很多朋友都说无法在android SDK 1.0上运行。既然那么多人关心,我在这里就把它重写一遍,顺便加入了一些新的功能 ,感兴趣的朋友可以...
Eclipse 插件 PMD 的扩展,它突出了由 Michael Wolf 为辛辛那提大学开发的 Android 上不安全的互联网连接。 此存储库中包含适用于任何环境中 PMD 的规则集。 SSL_Security_Rules_Eclipse.xml 删除了 Eclipse PMD ...
本项目是一个基于安卓的手机远程找人项目源码,在给手机发送“定位”俩字的短信后,手机就会自动给指定手机发送手机位置 自动打开3g流量,并用百度定位SDK...注意:本项目是android studio项目 eclipse可能无法直接导入