Android運行Socket項目時出現錯誤 Error: ShouldNotReachHere()

來源:互聯網
上載者:User

在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的“伺服器——用戶端”模式。
 

作者 “翠竹軒”

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.