日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android运行Socket项目时出现错误 Error: ShouldNotReachHere()

發(fā)布時間:2023/12/10 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android运行Socket项目时出现错误 Error: ShouldNotReachHere() 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在Android項目中實現(xiàn)Socket通信,服務(wù)器端使用main方法創(chuàng)建ServerSocket,運行啟動服務(wù)器時報錯“Error: ShouldNotReachHere() ”。

原因分析:java中使用main函數(shù)作為應(yīng)用程序的接口,class的生命周期始于main方法,終于main方法。Android雖然使用的是java語法,但是卻不使用main作為程序入口,一個activity啟動時要經(jīng)過onCreate()方法、onStart()方法和onResume()方法才算完全啟動,而且這些方法都是自動調(diào)用的,這是與java application運行的最大不同處。所以如果你新建的是Android Project,那么程序默認使用的就是android.jar來作為程序運行時環(huán)境,但是由于我們按照慣例將服務(wù)器端ServerSocket的啟動放在main方法中,android無法解析,所以會報出“Error: ShouldNotReachHere() ”錯誤,就是說程序永遠不會執(zhí)行到這里,這種錯誤平時也常見,比如說你在定義了一條return語句后又在后面加上一句System.out.println("xxxx")一樣,return表示程序已經(jīng)結(jié)束,后面那句System是永遠無法執(zhí)行的,因為按照java語法程序無法被解析。

解決方案一:隔離服務(wù)器端和客戶端。將服務(wù)器端ServerSocket的創(chuàng)建移到Android項目之外的一個Java Project中,先運行這個Java Project,啟動ServerSocket,再運行客戶端所在的Android Project。

解決方案二:更改服務(wù)器端運行時環(huán)境。將ServerSocket依舊寫在Java類中的main方法中,在IDE左邊的Package Exployer中選中項目,點擊鼠標右鍵,選擇“Run as——>Run configuration”,在彈出窗口的左邊框內(nèi)找到“Java application——>ServerSocket類”,在右邊框內(nèi)找到Classpath選項,找到其中的Bootstrap Entries,選中其中的android.jar,點擊右邊remove按鈕將其刪除,然后點擊Advanced按鈕,選擇Add Libaby選項,點擊ok按鈕,在彈出的對話框中選擇JRE System Library,點擊“next”按鈕,選擇Workplace Default JRE選項,點擊“finish”按鈕即可完成配置。

解決方案三:使用Android中的Activity創(chuàng)建服務(wù)器ServerSocket。這種方案應(yīng)該將服務(wù)器和客戶端都寫在同一個Activity中的不同方法中,先啟動服務(wù)器方法,再啟動客戶端方法。這是因為Android中一個Activity就代表了一個屏幕,如果你將服務(wù)器和客戶端寫在不同的Activity中,先啟動服務(wù)器Activity,再跳轉(zhuǎn)到客戶端Activity,那么服務(wù)器Activity就會執(zhí)行onPause()回調(diào)方法,相當于關(guān)閉Socket服務(wù)器了。

解決方案四:使用Android中的Service創(chuàng)建服務(wù)器ServerSocket。創(chuàng)建一個Service用來存放Socket服務(wù)器代碼,再創(chuàng)建一個Activity來存放Socket客戶端代碼和顯示通信信息。運行時先通過Activity啟動Service,再啟動客戶端代碼的Activity。由于Android中的Service是后臺運行,所以即使跳轉(zhuǎn)Activity也不會關(guān)閉服務(wù)。

這四種方案中,第一種將服務(wù)器和客戶端分隔在不同項目中,不利于管理;第三種方案將客戶端和服務(wù)器代碼寫在同一個類中,顯得雜亂而且不符合實際情況。個人覺得可取的是第二種和第四種方案,特別是第四種方案。第二種方案夾雜了Android和Java環(huán)境處理,第四種方案則是純粹的Android應(yīng)用,而且用到了Android中的Service,“Service——Activity”更符合Socket的“服務(wù)器——客戶端”模式。

轉(zhuǎn)載于:https://blog.51cto.com/jeet99521/654707

總結(jié)

以上是生活随笔為你收集整理的Android运行Socket项目时出现错误 Error: ShouldNotReachHere()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。