# Thread problem



## DerMeister2010 (12. Apr 2011)

Hallo erst mal,

Ich habe ein Problem beim trennen der Verbindung wenn ich ct.interrupt()  ct=(clientThread) aufrufe kommt eine Fehlermeldung besser gesagt immer wieder und wieder.Besser geasgt nach aufruf c.interrupt() beendet er irgendwie nicht die while(!isInterrupted()) oder vielleicht liegt es wo ander keine ahnung 

Es sind 3 Klassen

1.Klasse clientThread:



```
public class ClientThread extends Thread {

    private BufferedReader br;
    private JTextArea taAUsgabe;

    public ClientThread(BufferedReader br, JTextArea taAUsgabe) {
        this.br = br;
        this.taAUsgabe = taAUsgabe;
    }

    @Override
    public void run() {
        while (!this.isInterrupted()) {
            try {
                String zeile = br.readLine();
                taAUsgabe.append(zeile+System.getProperty("line.separator"));
            }
            catch (SocketTimeoutException ex)
            {
                 System.out.println("readtime out");
            }
            catch (IOException ex)
            {
               // break;
                JOptionPane.showMessageDialog(null,ex.getMessage() );
            }

         
        }
    }
}
```

2.Klasse Echo-Server:


```
public class EchoServer {

    private int port;

    public EchoServer(int port) {
        this.port = port;
    }

    public void start() {
        try {
            ServerSocket server = new ServerSocket(port);
            System.out.println("server started on port: " + port + "...");
            Socket socket = server.accept();
            System.out.println("Connected to: "+socket.getRemoteSocketAddress());
            OutputStream os = socket.getOutputStream();
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            while (true)
            {
                String zeile=br.readLine();
                if(zeile.equals("the end"))
                {
                    break;
                }
                bw.write(zeile);
                bw.newLine();
                bw.flush();
                System.out.println("Data exchange performed");
            }
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }

    public static void main(String[] args) {
        EchoServer es = new EchoServer(1337);
        es.start();
    }
}
```

3.Klasse ClientGUI:


```
public class ClientGui extends javax.swing.JFrame {
private Socket socket;
private int port=1337;
private  BufferedWriter bw ;
private BufferedReader br;
ClientThread ct;
    /** Creates new form ClientGui */
    public ClientGui() {
        initComponents();
        this.setLocationRelativeTo(null);
    }
 private void onVerbinden(java.awt.event.ActionEvent evt) {                             
        try {
            InetAddress addr =InetAddress.getByName("localhost");
            try {

                 socket = new Socket(addr, port);
                 socket.setSoTimeout(500);
                 OutputStream os = socket.getOutputStream();
                 bw = new BufferedWriter(new OutputStreamWriter(os));
                 InputStream is = socket.getInputStream();
                 br = new BufferedReader(new InputStreamReader(is));
                 ct = new ClientThread(br, jTAntwort);
                 ct.start();
                 btSenden.setEnabled(true);
                 btTrennen.setEnabled(true);
                 btVerbinden.setEnabled(false);
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(null,"connection to server failed!!!" );
            }
        } catch (UnknownHostException ex) {
          JOptionPane.showMessageDialog(null,"Unknown Host!!!" );
        }
    }                            

    private void onSenden(java.awt.event.ActionEvent evt) {                          
     try
     {
         String text=jTEingabe.getText();
         if(!text.equals(""))
         {
             bw.write(text);
             bw.newLine();
             bw.flush();
         }
     }
     catch(Exception ex )
     {
         JOptionPane.showMessageDialog(null,"Send to Server failed!!!" );
     }

    }                         

    private void onTrennen(java.awt.event.ActionEvent evt) {                           
        try {
            // TODO add your handling code here:
            
            bw.write("the end");
            bw.newLine();
            bw.flush();
            ct.interrupt();
            socket.close();
            btSenden.setEnabled(false);
            btTrennen.setEnabled(false);
            btVerbinden.setEnabled(true);
        } catch (IOException ex) {

        }
    }
```


----------



## Cola_Colin (12. Apr 2011)

Wenn ein Thread innerhalb einer IO-Operation durch ein interrupt unterbrochen wird, wird afaik eine IOException geworfen. Eventuell passiert das ?
Was für eine Fehlermeldung wird denn angezeigt ?


----------



## DerMeister2010 (12. Apr 2011)

Er sagt socket server closed

Wenn ich allerdings socket.close im onTrennen weglasse gibt er aus Connection reset


----------



## DerMeister2010 (12. Apr 2011)

Was mich Überhaupt zum verzweifeln bringt ist das er 
INTERRUPTED while loading Image(kommt gluab ich von der Klasse Client Thread) ausgibt auf der Konsole!!!!! aber warum???


----------

