天天看點

java nio demo簡單nio項目

   超級簡單的一個java nio項目。該項目伺服器隻有一個線程,而且隻做一件事,就是将用戶端發送的資料重新發回給用戶端,而協定也很簡單,隻是“長度 + byte”,而用戶端使用swt完成,最終效果圖如下:

java nio demo簡單nio項目

說明:

  • 為神馬使用swt
因為之前一直用swing,但老是用自己會的東西,感覺不會有太大進步,是以這次轉用swt  
  • 主要學會的東西
  1.      首先是swt的更新,當涉及到多個線程時,隻能通過調用Display來建立線程更新。否則會報錯,異常如下:
    Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access
               
    暫時我是這樣解決的,至于有沒有别的方法暫時不知道,類似代碼如下:
    mainUI.getShell().getDisplay().asyncExec(new Runnable() {
    			@Override
    			public void run() {
    				mainUI.setReceivedData(dataStr);
    			}
    		});
               
  2.  主要是SelectionKey的使用,在用戶端,其實主要監聽讀事件就好了,因為我這個demo裡面,寫是隻要你想寫就可以寫資料了。伺服器也是。而之前一直寫不出資料,是因為老是在ByteBuffer寫完資料之後,忘記調用 flip() 方法。因為這樣其實就相當于沒有資料寫出。
代碼位址:
http://download.csdn.net/detail/lingchen_yu/8267785
           

因為其實邏輯都比較簡單,是以沒寫神馬注釋,如果有疑問,或者不能運作,歡迎留言,我會盡快回複。

注意:在使用時,需要修改jar包依賴。因為我現在的環境是ubuntu 64位,如果是在windows在,需要自動修改jar包,路徑是lib下面的win32或者win64,分别對應32位windows系統和64位windows系統,像下面:

java nio demo簡單nio項目
想了一下,還是增加一個swing版的吧。效果圖如下:
java nio demo簡單nio項目
下載下傳位址:
http://download.csdn.net/detail/lingchen_yu/8307167
           
其實之前有搜過一些例子,但感覺都不是我想要的,是以我就自己寫了一個,希望對跟我一樣的人有用