在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了
分享到:
相关推荐
在Android中,我们通常不直接使用`main`方法,而是创建一个继承自`Activity`的类,然后在AndroidManifest.xml中指定启动Activity。然而,如果你需要在Android项目中运行Java `main`方法,可能是因为你在开发工具、...
### 非常强大的Eclipse中Android NDK开发环境的配置说明 #### 一、概述 本文档将详细介绍如何在Eclipse中配置Android NDK开发环境,并实现C/C++代码的自动编译以及通过Eclipse使用Ant生成JNI所需的头文件。配置流程...
在本教程中,我们将深入探讨如何使用Eclipse IDE进行Android应用开发,并专注于创建一个简单的"Hello, DatePicker"示例。Eclipse是Java开发者常用的集成开发环境,而在Android开发领域,它曾是主流的选择,尽管现在...
【Android Eclipse 计算器项目详解】 在移动应用开发领域,Android是一个广泛使用的平台,而Eclipse曾是Android开发者的主要集成开发环境(IDE)。本项目名为"安卓eclipse计算器",是一个适合初学者理解Android应用...
在IT行业中,Android开发是一项非常重要的技能,而Eclipse曾是开发者首选的集成开发环境(IDE)之一。本文将详细讲解如何基于Eclipse搭建Android开发环境,以便进行应用程序的创建和调试。 首先,你需要下载Eclipse...
### Eclipse里Android JNI的开发方法 #### NDK开发环境安装 **Native Development Kit (NDK)** 是由Google提供的工具集,旨在支持开发者使用C或C++编写原生代码,并能够将其与Java应用相结合,最终打包成APK。通过...
- **JAVAJDK SE 1.6**:这是Android开发的基础,提供必要的Java运行环境。 - **Eclipse 3.3.2**:一个强大的集成开发环境,用于编写Android应用程序。 - **Google Android SDK**:包含Android开发所需的工具集和库...
在完成所有功能后,开发者会通过Eclipse的Android模拟器或者连接的物理设备来测试应用,确保计算器能正确地执行各种计算任务。如果发现问题,他们会在调试模式下定位并修复代码中的错误。 总的来说,这个"android ...
本教程将指导你如何在Eclipse环境中集成Android NDK进行开发。 **1. 为什么要用NDK?** 使用Android NDK的主要原因是性能优化。原生代码可以直接与硬件交互,因此执行速度通常比Java更快。此外,NDK还可以用于利用...
本文将详细讲解如何搭建Android及Eclipse开发环境,包括Java运行环境的安装、Android SDK的配置、Eclipse的环境搭建以及Android ADT插件的安装。 首先,我们需要安装Java运行环境JRE(Java Runtime Environment)和...
在这个实例中,我们将深入探讨如何在Eclipse V4.2.0环境中,利用`Runnable`接口来实现这个功能。`Runnable`是Java多线程编程的核心组件,它允许我们定义一个可执行的任务,然后在不同的线程上运行。 首先,我们需要...
在本文中,我们将深入探讨如何使用Eclipse IDE V4.2.0开发一个简单的Android应用程序。Eclipse是一款广泛使用的Java集成开发环境,它为开发者提供了强大的工具集,使其能够便捷地构建各种应用程序,包括Android应用...
5. **Java 编程技能**:虽然该教程声称不要求 Java 经验,但熟悉 Java 是开发 Android 应用的基础,因为大部分 Android 应用是用 Java 编写的。 【构建和调试 SaySomething Android 应用程序】 在 Eclipse 中,...
【标题】"android-code.rar_android_eclipse android" 暗示了这是一个与Android应用程序开发相关的压缩包,其中包含了可以在Eclipse集成开发环境中使用的源代码。Eclipse是Android开发者早期广泛使用的IDE,它提供了...
Eclipse作为早期流行的Android开发工具,提供了完善的集成开发环境(IDE)支持,使得开发者能够方便地创建、调试和运行Android应用。本项目“Android 贪吃蛇”就是基于Eclipse开发的一个经典游戏,它展示了如何在...
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 ...
#### 七、在 Eclipse 中调试 Java 程序 1. **设置断点**:在需要暂停执行的代码行左侧点击即可设置断点。 2. **运行调试模式**:右键点击 Java 类 -> `Debug As` -> `Java Application`。 3. **使用调试器**:在...
在本实例中,我们将深入探讨如何使用Eclipse IDE V4.2.0开发一个基于Android的复选框应用,该应用模拟了购物车的功能。在Android编程中,复选框(CheckBox)是一种常用的UI组件,它允许用户进行多选操作,非常适合...