2012-01-26 76 views
0

檢索數據我有這樣的代碼的SwingWorker和插座

try { 
     ServerSocket serverSocket = null; 
     try { 
      serverSocket = new ServerSocket(888); 
     } catch (IOException e) {} 

     Socket clientSocket = null; 
     try { 
      clientSocket = serverSocket.accept(); 
     } catch (IOException e) {} 

     out = new PrintWriter(clientSocket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
     String inputLine, outputLine; 

     while ((inputLine = in.readLine()) != null) { 
      outputLine = "SRV:>"+inputLine+"<:VRS"; 
      out.println(outputLine); 
      taWyjscie.append(outputLine+"\n"); 
      if (inputLine.equals("Bye.")) 
       break; 
     } 

     out.close(); 
     in.close(); 
     clientSocket.close(); 
     serverSocket.close(); 

    } catch (IOException ex) { 
     taWyjscie.append("Błąd I/O: "+ex.getLocalizedMessage() + "\n"); 
    } 

它的工作原理,但應用程序無法使用,直到客戶端發送「再見」。

我希望能夠從服務器通過GUI與SwingWorker的消息發送給客戶端,因此即時戰鬥,我得到這個:

try { 
     ServerSocket serverSocket = null; 
     try { 
      serverSocket = new ServerSocket(888); 
     } catch (IOException e) {} 

     Socket clientSocket = null; 
     try { 
      clientSocket = serverSocket.accept(); 
     } catch (IOException e) {} 

     out = new PrintWriter(clientSocket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
     String inputLine, outputLine; 

     zadanie = new ServerTask(in); 

    } catch (IOException ex) { 
     taWyjscie.append("Błąd I/O: "+ex.getLocalizedMessage() + "\n"); 
    } 

private class ServerTask extends SwingWorker<String, String> { 
    private BufferedReader iin; 

    public ServerTask(BufferedReader win) { 
     this.iin = win; 
    } 


    @Override 
    protected String doInBackground() throws Exception { 
     String input; 
     while ((input = iin.readLine()) != null) { 
      System.out.println(input); 
      publish(input); 
      if (isCancelled()) 
       break; 
     } 
     return null; 
    } 
    @Override 
    protected void process(List<String> chunks) { 
     for(String el : chunks) { 
      textAreaOUT.append(el+"\n"); 
     } 
    } 

} 

現在我不能從服務器發送信息給客戶,而是來自客戶端的消息不顯示在textArea中。我從早上開始戰鬥,我不知道揮杆工作是如何工作的...

PS。在這前面的try ... catch是按鈕的actionPerformed功能(如果它使任何型差分)

回答

2

你永遠不會調用executeSwingWorker,這就是你的第一個錯誤。從那裏開始..