2012-01-26 9 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"); 
    } 

のようなコードを持っているがそれは動作しますが、クライアントが送信するまで、アプリは使用できなくなり、「さようなら」を。

は、私はSwingWorkerので、GUIにより、サーバからクライアントにそうイム戦いメッセージを送信できるようにしたい、私はこれを得た:

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。この試みは...前にキャッチするボタンの機能は(differeceを作る場合)

答えて

2

SwingWorkerのあなたの最初のバグには決してexecuteを呼び出すことはありません。そこから始めよう。

関連する問題