Estou com um problema no meu codigo, o qual quando estou tentando encerrar o codigo com a opção 3, para mostrar meus sensores no JFrame e encerrar o aplicativo. Quando coloco 3 ele mostra todos os sensores mas não encerra.
Será que alguem poderia me ajudar?
package Exercicio1;
import java.awt.Graphics;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Exercicio1 extends JFrame {
private static final long serialVersionUID = 1L;
static VectorListaSensores = new Vector();
public static void main(String[] args) {
	new Exercicio1();
}
public Exercicio1() {
	setSize(800,400);
	setLocationRelativeTo(null);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	setVisible(true);
}
public void paint(Graphics g) {
	int op = 0,cont = 0;
	
	while (op!=3 || cont<20) {
		op = Integer.parseInt(JOptionPane.showInputDialog("1-Inserir um nó do tipo Telos\n2-Inserir um nó do tipo Mica\n3-Exibir a rede e sair"));
		
		switch (op) {
		case 1: {
			cadastraTelos();
			cont++;
			break;
		}
		case 2: {
			cadastraMica();
			cont++;
			break;
		}
		case 3: {
			for (int i = 0; i < ListaSensores.size(); i++) {
				g.drawOval(ListaSensores.get(i).getX(),ListaSensores.get(i).getY(), 50, 50);
				g.drawString(ListaSensores.get(i).getId(), ListaSensores.get(i).getX(),ListaSensores.get(i).getY());
			}
			break;
		}
		}
	}
}
public static void cadastraTelos() {
	Telos entrada = new Telos(0, 0, null, 0);
	entrada.setId(JOptionPane.showInputDialog("Digite o nome do sensor")); 
	entrada.setX(Integer.parseInt(JOptionPane.showInputDialog("Digite o ponto X do sensor")));
	entrada.setY(Integer.parseInt(JOptionPane.showInputDialog("Digite o ponto Y do sensor")));
	entrada.setTempsensor(Integer.parseInt(JOptionPane.showInputDialog("Digite o tempo do sensor")));
	ListaSensores.add(entrada);
}
public static void cadastraMica() {
	Mica entrada = new Mica(0, 0, null, 0);
	entrada.setId(JOptionPane.showInputDialog("Digite o nome do sensor")); 
	entrada.setX(Integer.parseInt(JOptionPane.showInputDialog("Digite o ponto X do sensor")));
	entrada.setY(Integer.parseInt(JOptionPane.showInputDialog("Digite o ponto Y do sensor")));
	entrada.setRuidosensor(Integer.parseInt(JOptionPane.showInputDialog("Digite o ruido do sensor")));
	ListaSensores.add(entrada);
}
}
Classe NoSensor
package Exercicio1;
public class NoSensor {
private int x;
private int y;
private String id;
public NoSensor(int x, int y, String id) {
	super();
	this.x = x;
	this.y = y;
	this.id = id;
}
public int getX() {
	return x;
}
public void setX(int x) {
	this.x = x;
}
public int getY() {
	return y;
}
public void setY(int y) {
	this.y = y;
}
public String getId() {
	return id;
}
public void setId(String id) {
	this.id = id;
}
}
Classe Telos
package Exercicio1;
public class Telos extends NoSensor{
private int tempsensor;
public Telos(int x, int y, String id, int tempsensor) {
	super(x, y, id);
	this.tempsensor = tempsensor;
}
public int getTempsensor() {
	return tempsensor;
}
public void setTempsensor(int tempsensor) {
	this.tempsensor = tempsensor;
}
}
Classe Mica
package Exercicio1;
public class Mica extends NoSensor {
private int ruidosensor;
public Mica(int x, int y, String id, int ruidosensor) {
	super(x, y, id);
	this.ruidosensor = ruidosensor;
}
public int getRuidosensor() {
	return ruidosensor;
}
public void setRuidosensor(int ruidosensor) {
	this.ruidosensor = ruidosensor;
}
}