android eclipse中的Android直接運行java main方法

       在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了
相關文章
相關標籤/搜索