Programa Consumindo muito processamento

Boa a tarde a todos,
Estou fazendo um servidor de chat em java, nesse servidor tem uma JTable com todos os clientes conectados…

Eu adicionei um botão nessa JTable para Kickar o cliente, acontece que toda vez que eu clico nesse botão o uso do meu
processador sobe muito, se eu clicar em dois botões o processamento vai de 2% para 100%…

Segue o código do botão

public class ButtonColumn extends AbstractCellEditor implements
		TableCellRenderer, TableCellEditor, ActionListener {
	
	private static final long serialVersionUID = 1L;
	private JTable table;
	private JButton renderButton;
	private JButton editButton;
	private String text;
	private Servidor server;

	public ButtonColumn(JTable table, int column, Servidor server) {
		super();
		this.table = table;
		this.server = server;
		renderButton = new JButton();

		editButton = new JButton();
		editButton.setFocusPainted(false);
		editButton.addActionListener(this);
		editButton.setSize(10, 5);
		renderButton.setSize(10, 5);

		TableColumnModel columnModel = this.table.getColumnModel();
		columnModel.getColumn(column).setCellRenderer(this);
		columnModel.getColumn(column).setCellEditor(this);
	}

	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		if (hasFocus) {
			renderButton.setForeground(table.getForeground());
			renderButton.setBackground(UIManager.getColor("Button.background"));
		} else if (isSelected) {
			renderButton.setForeground(table.getSelectionForeground());
			renderButton.setBackground(table.getSelectionBackground());
		} else {
			renderButton.setForeground(table.getForeground());
			renderButton.setBackground(UIManager.getColor("Button.background"));
		}

		renderButton.setText((value == null) ? "" : value.toString());
		return renderButton;
	}

	public Component getTableCellEditorComponent(JTable table, Object value,
			boolean isSelected, int row, int column) {
		text = (value == null) ? "" : value.toString();
		editButton.setText(text);		
		return editButton;
	}

	public Object getCellEditorValue() {
		return text;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		server.kickar();
	}

E o método kickar()

public void kickar(){
		currentClient = clients.get(tbClientes.getValueAt(tbClientes.getSelectedRow(), 0));
		sendData("ATENÇÃO! Você foi kickado do servidor");
		sendData("TERMINATE");
		removerClient(currentClient.getId());
		atualizarGrid();
	}

Já tentei varias coisas mas sempre que clico nesse botão o processamento vai lá em cima…

Na verdade o problema ocorre nessa parte do codigo

sendData("TERMINATE");
private void sendData(String message) {
		try {
			currentClient.getOutput().writeObject("SERVER>>>" + message);
			currentClient.getOutput().flush();
			area.append(normalColor, "\nMenssagem enviada para: "+currentClient.toString());
			area.append(normalColor, "\n"+"   SERVER>>>" + message);
			texto.setText("");
		}

		catch (IOException e) {
			area.append(errorColor, "\nErro na tentatica de escrever o objeto");
		}
	}

Estranho que esse método apenas fecha a conexão, mas exatamente na hora que eu mando o "TERMINATE"
que o processamento vai lá em cima…