I'm trying to stop a thread but I can't do that :
public class Middleware {
public void read() {
    try {
        socket = new Socket("192.168.1.8", 2001);
        // code .. 
        Scan scan = new Scan();
        thread = new Thread(scan);
        thread.start();
    } catch (UnknownHostException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}
class Scan extends Thread {
    public void run() {
        while (true) {
            try {
            // my code goes here
            } catch (IOException ex) {
                thread.currentThread().interrupt();
            }
        }
    }
}
public void stop() {
    Thread.currentThread().interrupt();
}
// get and setters
}
So, even when i call the method 'stop' the thread don't stop. It keeps alive.
How can I interrupt/stop this thread ?
UPDATE (@little approach)
private void tb_startActionPerformed(java.awt.event.ActionEvent evt) {                                         
    Middleware middleware = new Middleware();
    if (tb_start.getText().equals("Start")){
        tb_start.setText("Stop");
        // starting to read rfid tags
        middleware.read();
    }else{
        tb_start.setText("Start");
        // stop reading rfid tags
        middleware.stop();
    }
}
The Middleware class :
public class Middleware {
    private Scan scan;
    public void read() {
        scan = new Scan();
        scan.start();
    }
    private class Scan extends Thread {
        @Override
        public void run() {
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("reading...");
            }
        }
    }
    public void stop() {
        if (scan != null) {
            scan.interrupt();
        }
    }
}
But when I try to stop the thread, it doesn't.
What could be wrong in the code above ?
 
     
     
     
     
     
     
     
     
     
     
    